2015-09-14 14 views
9

próbuję złapać wyjątki w CakePHP v3.0, ale nie wydaje się działać:Złap Wyjątek w CakePHP 3: nie działa

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

To nie złapać wyjątek:

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 

Bardzo denerwujące, używam go do przechwytywania nieudanych wiadomości e-mail wysyłanych na lokalnym serwerze.

Wielkie dzięki.

+2

pan wskazując zarówno importowanego klasy lub do jednego w tej samej przestrzeni nazw jako bieżącej klasy, więc sprawdź co 'Exception' w kodzie faktycznie odnosi do - gdybym zgadywał, powiedziałbym, że prawdopodobnie nie jest to natywna klasa '\ Exception' w globalnej przestrzeni nazw. ps, proszę zawsze podawać stos śledzenia i informacje kontekstowe podczas publikowania błędów! – ndm

+0

Korzystanie z RuntimeException zamiast Exception, załatwił sprawę. Dzięki! –

+0

@ Gael.D Cierpię z powodu problemu. użyj swojego rozwiązania. nie mógł żadnego wyjścia. – Yusuf

Odpowiedz

26

Dodawanie odpowiedzi tutaj, żeby przynieść Dow pytania bez odpowiedzi Statystyki dół:

Trzeba użyć \Exception lub bardziej szczegółowe, przestrzeni nazw, nazwę wyjątku

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

Nie pomyślałbym o tym od 100 lat. –

3

Miałem podobny problem, gdy Próbowałem złapać MissingConnectionException.

W moim przypadku następujące linie rozwiązały mój problem.

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

Mam nadzieję, że byłaby to pomoc dla Ciebie.

0

Można spróbować użyć 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(); 
}