Error cuando Zend_Layout se muestra dos veces

In: zend framework

12 jul 2010

mvc 156x150 Error cuando Zend Layout se muestra dos vecesUn error que ha surgido trabajando con , es que hay unas excepciones que cuando son tratadas por el controlador de errores, se muestra dos veces el contenido del layout. Esto es debido a que Zend Framework trae por defecto dos plugins (si se utiliza el Zend_Layout), que estan al final de la pila de ejecución de :

  • Zend_Layout_Controller_Plugin_Layout: este plugin actua en el postDispatch, y aplica el patrón Two Step View (captura el contenido en el Zend_Response, y después lo pasa al Zend_Layout para processarlo y se inyectado en el script de la vista del Layout).
  • Zend_Controller_Plugin_ErrorHandler: también actua en el postDispatch, y se encarga de comprobar si se ha producido una excepción y ha sido registrada. En tal caso, ejecuta otra petición al controlador y acción para tratar errores y mostrarlos según sea conveniente.

El plugin de layout es ejecutado en la posición 99 de la pila, y el plugin de errores en la 100. Esto provoca que se ejecute una petición en el controlador de errores, habiendo establecido ya el layout. Para resolver este problema existen dos formas: cambiar el orden de ejecución de los plugins, o vaciando el contenido de la respuesta cuando se ejecuta la petición de tratamiento de errores.

La última opción es la más simple y conlleva menos problemas; solamente hay que añadir una línea en la acción del controlador de errores. Normalmente se trata del errorAction del ErrorController, y la primera línea de código debería ser:

public function errorAction() {
 
        $this->getResponse()->clearBody();
 
        //handle error ........
}

El siguiente diagrama muestra el flujo de ejecución de Zend Framework:

zend framework flow diagram Error cuando Zend Layout se muestra dos veces

Artículos relacionados:

Entradas relacionadas:

  1. Error con Zend Tool y el fichero NetBeansCommandsProvider.php
  2. ZFDebug: debug bar para Zend Framework
  3. Acceder a Zend_View desde un plugin en Zend Framework
  4. Zend_Auth: Identificación y autentificación en Zend Framework
  5. Configurar Subversion para utilizar los repositorios externos de Zend Framework

Formulario de Comentario

Página 1 de 11