Controlando los errores con Zend Framework

 Una vez que somos capaces de controlar y personalizar los errores en PHP y excepciones en PHP, nos puede interesar centralizar los errores y excepciones que nos pueda lanzar Zend Framework.

Lo centralizaremos usando ErrorController, un controlador que, como su propio nombre indica, se encargará exclusivamente de los errores.

Cosas importantes:

  • para que funcione deberemos decirle a nuestro FrontController que desactive las excepciones: $fc->throwExceptions(false);
  • Para que el ErrorController tome el control, el Zend Framework deberá lanzar una excepción o hacerlo nosotros mismos mediante:  throw new Exception(‘Error nosequé’);
  • Podemos utilizar las excepciones existentes en Zend Framework, o crear las nuestras propias extendiendo Zend_Exception.
  • En éste caso guardaremos los errores en un Zend_Log, aunque por supuesto podríamos hacerlo en una BD, o enviarnos un mail, o generar un RSS con los errores… cualquier cosa!

Dicho esto, vayamos al grano. El código del ErrorController:

class ErrorController extends Zend_Controller_Action
 
{
function init(){
$this->initView();
 
$this->helper->layout->setLayout('error');
 
}//init
 
public function errorAction() {
 
$errors = $this->getParam('error_handler');
 
$this->view->mensaje= '';
 
switch ($errors->type) {
 
//Error MVC
 
case Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_CONTROLLER:
 
case Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_ACTION:
 
//devolveremos un código 404 de página inexistente
 
$this->getResponse()->setHttpResponseCode(404);
 
//Lo que no existe es el controller
 
if ($errors->type == Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_CONTROLLER) {
 
$this->view->mensaje= 'No se ha encontrado el Controller: ';
 
$this->view->mensaje.= $errors->request->getControllerName();
 
}
 
//Lo que no existe es el action
 
if ($errors->type == Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_ACTION) {
 
$this->view->mensaje= ' No se ha encontrado el Action: ';
 
$this->view->mensaje.= $errors->request->getActionName();
 
}
 
break;
 
//No es un error MVC
 
default:
 
//se cogenlas excepciones que han saltado
 
$errores = $this->getResponse()->getException();
 
//se trata cada tipo de excepcion
 
foreach ($errores as $error){
 
switch(get_class($error)){
 
case 'Zend_Db_Statement_Exception':
 
$this->view->mensaje = 'ERROR DE BBDD: '.$error->getMessage();
 
break;
 
case 'Zend_View_Exception':
 
$this->view->mensaje = 'ERROR EN LA VISTA: '.$error->getMessage();
 
break;
 
case 'Zend_Loader_Exception':
 
$this->view->mensaje = 'ERROR AL CARGAR: '.$error->getMessage();
 
break;
 
case 'Zend_Form_Exception':
 
$this->view->mensaje = 'ERROR EN EL FORMULARIO: '.$error->getMessage();
 
break;
 
//cualquier error no especifico
 
default:
 
$this->view->mensaje= 'Error desconocido!';
 
break;
 
} //end switch(get_class($error))
 
}
 
break; //terminar con los errores no MVC
 
}
 
/* PARA GUARDAR TODOS LOS DATOS EN UN ARCHIVO DE ERRORES (LOG)
 
$log = new Zend_Log(new Zend_Log_Writer_Stream(Globals::getConfig()->dirs->tmp.'Error.log'));
 
$log->debug($errors->exception->getMessage() . "\n" . $errors->exception->getTraceAsString());
 
*/
 
return;
 
} // public errorAction
 
} // class ErrorController
 
 
 
Etiquetas:
, ,
Buscador hispano de Zend Framework:.

Comenta el articulo:

Requerido

Requerido,