2009-07-29 12 views
22

Używam Zend Framework i przez jakiś czas żyję z tym problemem, ale teraz jest to po prostu zbyt denerwujące, więc wyślę ci to pytanie.Wyświetlenie błędów PHP podczas korzystania z Zend Framework

Istnieją pewne problemy w ramach Zend, które Zend może rozpoznać (np. Wywołanie nieistniejącego kontrolera) i prześle ten problem do sterownika ErrorController. Wszystko działa dobrze.

Wygląda na to, że niektóre problemy spowodują, że Zend Framework zawiedzie i wyświetli błąd za pośrednictwem php, tak jakby nie istniała jakaś funkcja. Te, które widzę i naprawię.

Czasami Zend nie zawiedzie, ale po prostu wyśle ​​pustą odpowiedź. Otrzymam pustą stronę. Ich układ się nie wyświetla, nie ma kodu, nie ma nic, co mogłoby mi dać pojęcie, co poszło nie tak. Ostatnim razem wystąpił błąd require(). Musiałem ręcznie wymyślić to bez opinii.

Czy ktokolwiek z was tego doświadczył? Czy masz jakieś porady, jak wyświetlić te błędy? Każda pomoc będzie doceniona!

Odpowiedz

31

Wewnętrzna obsługa błędów komponentów MVC frameworka może jedynie wychwycić wyjątki, a nie błędy PHP.

Aby pomóc w rozwoju podczas debugowania, można użyć standard:

error_reporting(E_ALL|E_STRICT); 
ini_set('display_errors', 'on'); 

Ponadto, jeśli używasz nowy Autoloader dołączone 1,8, przeznaczenie:

Zend_Loader_Autoloader::getInstance()->suppressNotFoundWarnings(false); 

Aby umożliwić nieudanym zawierać/wymagać oświadczeń do wydania.

+0

To był suppressNotFoundWarnings że ja przegapić. Dziękuję bardzo! Nie masz pojęcia, ile czasu to mnie oszczędza. – Ethan

+0

To dziwne, ponieważ instrukcja mówi, że ZF domyślnie nie tłumi błędów: http://framework.zend.com/manual/1.12/en/zend.loader.autoloader.html –

12

Dla innych napotykając to pytanie: Zmieniłem następujący wiersz w configs/application.ini

resources.frontController.params.displayExceptions = 0 

do:

resources.frontController.params.displayExceptions = 1 

To pozwoliło mi zobaczyć pełną wyjątku, łącznie stacktrace.

7

Edytuj plik public/index.php.
Zmień APPLICATION_ENV na "rozwój".

Spowoduje to użycie ustawień programistycznych w pliku application/configs/application.ini. Te ustawienia określają, czy tłumić błędy.

+0

To było rozwiązanie, które działa dla mnie, dzięki! – leticia

11

Zestaw ten w config:

phpSettings.display_startup_errors = 1 
phpSettings.display_errors = 1 
resources.frontController.params.displayExceptions = 1 
+0

+1 Fantastyczny !!!!! Te linie to czysta magia! Dzięki! – diosney

+0

Wewnątrz jakiego pliku konfiguracyjnego? – rhand

+0

Edytuj w => application/configs/config.php – Prabhagaran

1

Otwarte urproject/application/config i otwarty application.ini
Zmiana druga linia:

phpSettings.display_errors = 0 

do

phpSettings.display_errors = 1 

teraz wyświetli błędy.

5

Jest już za późno, aby odpowiedzieć na to pytanie. Ale mam nadzieję, że to pomoże komuś innemu ...

Wystarczy umieścić następującą funkcję w pliku bootstrap.php umożliwienia wyjątki ..

protected function _initErrorDisplay(){ 
     $frontController = Zend_Controller_Front::getInstance(); 
     $frontController->throwExceptions(true); 
    } 
+0

Czy mogę zapytać, co masz na myśli mówiąc o "włączeniu"? Czy rejestrowanie wyjątku nie było wcześniej rejestrowane? A może wyświetla wyjątek w widoku aplikacji? – Stephane

1

Szybka i brudne decyzję, jeśli żadna z wymienionych metod już pracował (przydatne dla starych lub brzydkiego skonfigurowane wersji ZF):

  • znaleźć ErrorController swojej aplikacji.
  • umieścić wywołanie funkcji debug_print_backtrace na górze metody init() z matrycy (opcjonalnie)
0

Dla każdego, dla których odpowiedzi udzielone tutaj nie działa, zawsze można iść do logów Apache zobacz opis problemu. Byłoby oczywiście wygodniej, gdyby było to widoczne na stronie, ale uważam, że jest to dopuszczalna alternatywa.

/var/log/apache2/error.log 

mam ten plik otwarty z vim i typ: e, aby odświeżyć i G, aby przejść do dołu strony, aby zobaczyć najnowszy błąd, gdy pojawia się pusta strona. Informuje o czasie wystąpienia błędu, wiadomości i linii, więc jest to bardzo pomocne.

0

umieścić te linie w application/configs/config.php

error_reporting(E_ALL|E_STRICT); 
ini_set('display_errors', 'on');