2009-07-29 25 views
22

He estado usando Zend Framework y estoy viviendo con este problema por un tiempo, pero ahora es demasiado molesto, así que le enviaré la pregunta.Mostrar errores de php al usar Zend framework

Hay ciertos problemas dentro del marco de Zend que Zend puede reconocer (como llamar a un controlador inexistente) y enviará ese problema al ErrorController. Lo estoy trabajando bien.

Parece que hay algunos problemas que Zend Framework fallará y mostrará el error a través de php, como si una determinada función no existe o algo así. Esos que puedo ver y arreglar.

A veces, Zend no fallará, pero también enviará una respuesta vacía. Conseguiré una página en blanco. El diseño no aparece, no hay código, no hay nada que me dé una idea de lo que salió mal. La última vez, hubo un requerimiento() que falló. Tuve que resolver esto manualmente sin comentarios.

¿Alguno de ustedes ha experimentado esto? ¿Tiene algún consejo sobre cómo mostrar estos errores? ¡Cualquier ayuda sería apreciada!

Respuesta

31

El manejo de error interno de los componentes MVC de la infraestructura solo puede capturar excepciones, no errores de PHP.

Para ayudar en la depuración durante el desarrollo, puede utilizar el estándar:

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

Además, si usted está utilizando el nuevo cargador automático incluye con 1.8, utilice:

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

Para permitir fallido incluyen/requieren declaraciones que se emitirán.

+0

Fue suppressNotFoundWarnings los que me había perdido. Muchas gracias! No tienes idea de cuánto tiempo esto me salva. – Ethan

+0

Eso es extraño porque el manual dice que ZF no realiza la supresión de errores de forma predeterminada: http://framework.zend.com/manual/1.12/en/zend.loader.autoloader.html –

12

Para otros que vienen a través de esta pregunta: He cambiado la siguiente línea en configuraciones/application.ini

resources.frontController.params.displayExceptions = 0 

Para:

resources.frontController.params.displayExceptions = 1 

Esto me permitió ver la Excepción completa, incluyendo StackTrace.

7

Edite el archivo public/index.php.
Cambie APPLICATION_ENV a 'desarrollo'.

Esto usará la configuración de desarrollo en su archivo application/configs/application.ini. Esas configuraciones definen si suprimir errores.

+0

Esta fue la solución que me funciona, ¡Gracias! – leticia

11

Conjunto esto en su configuración:

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

+1 Awesome !!!!! Estas líneas son pura magia! ¡Gracias! – diosney

+0

¿Dentro de qué archivo de configuración? – rhand

+0

Editar en => application/configs/config.php – Prabhagaran

1

abierto urproject/application/config y abierto application.ini
Cambiar la segunda línea:

phpSettings.display_errors = 0 

a

phpSettings.display_errors = 1 

Ahora mostrará errores

5

Ya es demasiado tarde para responder esta pregunta. Pero espero que ayude a alguien más ...

Sólo tiene que colocar la siguiente función en el archivo de Bootstrap.php para permitir excepciones ..

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

¿Puedo preguntar, qué quiere decir con su 'enable'? ¿Está registrando la excepción que no se registró antes? ¿O está mostrando la excepción en la vista de la aplicación? – Stephane

1

decisión rápida y sucia, si ninguno de los métodos ya mencionados trabajó (útil para la versión vieja o fea-configurado de ZF):

  • encuentra ErrorController de tu aplicación.
  • poner la llamada de la función debug_print_backtrace en la parte superior del método init (con troquel() opcionalmente)
0

Para cualquiera de los cuales las respuestas que se dan aquí no funcionaron, siempre se puede ir a los registros de Apache a ver una descripción del problema. Por supuesto, sería más conveniente si esto se mostrara en la página, pero creo que es una alternativa aceptable.

/var/log/apache2/error.log 

que tienen este archivo abierto con vim y tipo: e para refrescar y G para ir a la parte inferior de la página para ver el error más reciente cuando llegue a la página en blanco. Te dice la hora en que ocurrió el error, el mensaje y la línea, por lo que es bastante útil.

0

poner estas líneas en application/configs/config.php

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