2013-06-03 19 views
13

Zauważyłem, że aplikacja szkieletowa dostarczana przez Zend nie obsługuje error 500. Wiem, że w ZF1 zajął się tym ErrorController. Zrobiłem kilka badań w Internecie, ale nie znalazłem jednoznacznego rozwiązania tego problemu.Zend framework 2 zalecany sposób obsługi błędów

Jaki jest najlepszy sposób obsługi błędów w ZF2. Czy byłby on na podstawie jednego modułu lub globalnej obsługi wyjątków/błędów?

Wiem, że innym rozwiązaniem byłoby dodanie ini_set('display_errors', true); do mojego index.php, ale nie podoba mi się to rozwiązanie. Wydaje się, że ramy powinny zapewniać sposób postępowania z błędami.

+1

Błędy są dość dobrze obsługiwane w aplikacji szkieletowej. Co próbujesz zrobić? Pytanie jest niejasne. ([deklaracja błędu 500 szablonów] (https://github.com/zendframework/ZendSkeletonApplication/blob/master/module/Application/config/module.config.php#L84), [przełącznik włączania/wyłączania błędów] (https://github.com/zendframework/ZendSkeletonApplication/blob/master/module/Application/config/module.config.php#L81)) – David

Odpowiedz

28

można obsługiwać wyjątki w tak chcesz po łowienie go jak w poniższym przykładzie, w którym są połowu wyjątek globalnie ...:

W metodzie onBootstrap w swojej Module.php można dołączyć funkcję do wykonania gdy wystąpi zdarzenie, co następuje załączyć funkcję być wykonywane, gdy wystąpił błąd (wyjątek) jest podniesione:

public function onBootstrap(MvcEvent $e) 
{ 
    $application = $e->getApplication(); 
    $em = $application->getEventManager(); 
    //handle the dispatch error (exception) 
    $em->attach(\Zend\Mvc\MvcEvent::EVENT_DISPATCH_ERROR, array($this, 'handleError')); 
    //handle the view render error (exception) 
    $em->attach(\Zend\Mvc\MvcEvent::EVENT_RENDER_ERROR, array($this, 'handleError')); 
} 

a następnie zdefiniować funkcję obsługi błędu w dowolny sposób następujący przykład:

public function handleError(MvcEvent $e) 
{ 
    //get the exception 
    $exception = $e->getParam('exception'); 
    //...handle the exception... maybe log it and redirect to another page, 
    //or send an email that an exception occurred... 
} 
+0

Nie działa dla mnie! – Abadis

+1

Czy możesz pokazać nam, w jaki sposób przekierowujemy na inną stronę z poziomu funkcji handleError? – srayner