2015-09-14 8 views
9

cerco di catturare le eccezioni in CakePHP v3.0, ma non sembra funzionare:Cattura Eccezione in CakePHP 3: non funziona

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) { 
} 

non cattura l'eccezione:

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 

Abbastanza fastidioso, lo sto usando per catturare l'e-mail di errore su un server locale.

Grazie mille.

+2

Stai puntando a uno una classe importata, o ad uno nello stesso namespace della classe corrente, in modo da controllare ciò che 'Exception' nel codice si riferisce in realtà a - se dovessi indovinare, direi che probabilmente non è la classe nativa '\ Exception' nello spazio dei nomi globale. ps, per favore includi sempre stacktraces e informazioni contestuali quando pubblichi errori! – ndm

+0

Utilizzare RuntimeException invece di Exception ha fatto il trucco. Grazie! –

+0

@ Gael.D Ho sofferto con il problema. usa la tua soluzione. non potrebbe alcun output. – Yusuf

risposta

26

Aggiunta la risposta qui, solo per portare Dow le domande senza risposta statistiche giù:

È necessario utilizzare \Exception o, namespace, denominazione più specifica eccezione

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

Non ci avrei pensato in 100 anni. –

3

Ho avuto un problema simile quando Ho provato a catturare MissingConnectionException.

Nel mio caso, le seguenti righe hanno risolto il mio problema.

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

Spero che sarebbe di aiuto per voi.

0

Si potrebbe provare a utilizzare 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(); 
}