En este tutorial vamos a explicar como redirigir todas las excepciones que se pueden producir en una aplicación desarrollada en CakePHP. Entre estas excepciones encontraremos las del tipo “Missing Controller” por que se está apuntando a un controlador que no exista, o respuestad del servidor con código 400 o 500. Para el tutorial estamos trabajando con la versión 2.2.9 de CakePHP.
Los pasos que vamos va a seguir son:
- Creación de la clase que renderizará las vista con los errores.
- Configurar CakePHP para que cuando se lance una excepción se apunte a esta nueva clase.
Crear clase para renderizar las excepciones
Para ello vamos a crear un fichero que llamaremos ‘MyAppExceptionRender‘ y lo vamos a situar en el directorio ‘~/app/Lib/Error/‘. Este es el contenido que tendrá nuestro fichero:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
<App::uses('EceptionRenderer', 'Error'); class MyAppExceptionRenderer extends ExceptionRenderer { protected function _cakeError(CakeException $error) { return $this->controller->redirect('/'); } public function error400($error) { return $this->controller->redirect('/'); } public function error500($error) { return $this->controller->redirect('/'); } } |
Hemos sobreescrito tres metodos de la clase ‘ExceptionRenderer’ que se encargan de:
- ‘_cakeError‘: capturar todos los errores internos generados por el framework CakePHP
- ‘error400‘: muestra pantalla de error para respuestas del servidor con código 400
- ‘error500‘: muestra pantalla de error para respuestas del servidor con código 500
Cuando ocurra alguno de estos errores se redirigirá al visitante al ‘home’ de nuestra aplicación.
Configurar el core de CakePHP
Tras crear el fichero anterior ahora debemos configurar el core de la aplicación para que utilice esta clase. Para ello hay que editar el fichero ‘~/app/Config/core.php’ con esta configuración:
1 2 3 4 5 |
Configure::write('Exception', array( 'handler' => 'ErrorHandler::handleException', 'renderer' => 'AppExceptionRenderer', 'log' => true )); |
Siguiendo estos dos sencillos pasos habremos conseguido que todas las excepciones que se produzcan en nuestra aplicación se redirijan al home de nuestro sitio web.
Deja tu comentario