2015-09-14 60 views
9

我試圖抓住在CakePHP V3.0例外,但它似乎並不工作:捕獲異常:不工作

try{ 
    $email = new Email('default'); 
    $email->from([Configure::read('email') => Configure::read('emailName')]) 
     ->to(Configure::read('email')) 
     ->bcc($to) 
     ->subject(__('XXXX') . ' : ' . __('XXXX')) 
     ->template('fail', 'default') 
     ->emailFormat('html') 
     ->send(); 
} catch (Exception $ex) { 
} 

它不捕獲異常:

Could not send email: mail(): Failed to connect to mailserver at "localhost" port 25, verify your "SMTP" and "smtp_port" setting in php.ini or use ini_set() Cake\Network\Exception\SocketException 

很煩人,我用它來捕獲本地服務器上的失敗電子郵件發送。

非常感謝。

+2

你地指向一個導入的類,或者在同一個命名空間爲當前類,所以檢查什麼'Exception'在你的代碼實際上是指到 - 如果我猜測,我會說這可能不是全局名稱空間中的本地'\ Exception'類。 ps,發佈錯誤時請始終包含堆棧跟蹤和上下文信息! – ndm

+0

使用RuntimeException而不是Exception,做了訣竅。 謝謝! –

+0

@ Gael.D我一直在痛苦的問題。用你的解決方案。沒有任何輸出。 – Yusuf

回答

26

添加答案在這裏,只需要拿道指懸而未決的問題統計下來:

您需要使用\Exception或更具體的,命名空間,異常名

try { 
    // code 
} catch (\Exception $e) { 
    // error 
} 
+2

我不會想到在100年內。 –

3

我已經當了類似的問題我試圖趕上MissingConnectionException

在我的情況下,以下幾行解決了我的問題。

use Cake\Core\Exception\Exception; 
... 
try { 
    // Your test code here 
} catch (Exception $e) { 
    ... 
} 

希望這會對你有所幫助。

0

你可以嘗試使用try - catch

try { 
    $email = new Email('default'); 
    $email->from([Configure::read('email') => Configure::read('emailName')]) 
    ->to(Configure::read('email')) 
    ->bcc($to) 
    ->subject(__('XXXX') . ' : ' . __('XXXX')) 
    ->template('fail', 'default') 
    ->emailFormat('html') 
    ->send(); 
} catch (\PDOException $e) { 
    $error = $e->getMessage(); 
}