En este tutorial explicaremos como crear un nuevo manejador de excepciones en una aplicación desarrollada con el framework ‘CakePHP‘ para que tratar de forma personalizada todas las excepciones que se produzcan en la aplicación, y mostrar por pantalla el error con el formato que se quiera.
Configurar el nuevo manejador de excepciones
Un ‘Exception handler‘ o manejador de excepciones será una clase encargada de capturar las excepciones y tratarlas, mostrando en pantalla la salida correcta. Creando nuestro propio manejador de excepciones conseguiremos tener control absoluto sobre las nuevas excepciones que vayamos creando en nuestra aplicación CakePHP.
Lo que vamos a hacer es reutilizar el manejador de excepciones que viene definido en CakePHP. Por tanto para ello crearemos un nuevo majenador que extienda del que viene por defecto.
PASO 1: para crear el nuevo manejador de excepciones debemos editar el fichero de configuración del núcleo de CakePhp, ‘~/app/Config/core.php‘, añadiendo esta línea en la que se indica:
1 Configure::write('Exception.handler', 'MyExceptionHandler::handle');
- Nombre de la clase del nuevo manjeador de excepciones: ‘MyExceptionHandler’
- Nombre del método que se ejecutará al capturar la excepción: ‘handle’
Al añadir la configuración del nuevo ‘Exception.handler‘ CakePHP ignorará el resto de configuraciones previas existentes para manejar excepciones, pero como nosotros vamos a crear un manejador que herede del que ya existe el comportamiento será el mismo, salvo que ahora tendremos control sobre nuestro manejador de excepciones, pudiendo realizar las acciones que se requieran.
PASO 2: añadir la siguiente línea al fichero de configuración de CakePhp ‘~/app/Config/bootstrap.php‘:
1 App::uses('MyExceptionHandler', 'Lib');
PASO 3: crear la clase para el nuevo manejador de excepciones. Para ello crear el fichero ‘~/app/Lib/MyExceptionHandler.php‘. En este clase añadiremos un método que será el que se ejecute cuando se produzca alguna excepción en la aplicación y que se configuró en el ‘paso 1′. Por tanto, el contenido de este fichero quedará de la siguiente forma:
PHP |copy code |?
1 class MyExceptionHandler extends ErrorHandler{2 public static function handle($error) {3 echo 'Exception capturada por Developando: '.$error->getMessage();4 }
5 }
Tras realizar estos pasos todas las excepciones que se produzcan en la aplicación serán tratadas por el método ‘handle($error)‘ de la nueva clase que hemos creado.
Con esta configuración hecha hasta el momento, cuando se produzca una excepción veremos una pantalla en blanco con una línea con el mensaje de dicha excepción.
Esta sería una línea de ejemplo de una posible salida por pantalla de nuestra aplicación frente a una excepción:
1 Exception capturada por Developando: SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'id' cannot be null
El siguiente paso que se debe seguir es dar formato a la página donde se están mostrando las excepciones, y tratralas de la forma conveniente para realizar alguna acción en función del código o mensaje de error que contenga cada excepción capturada. Esto se tratará en futuros tutoriales.
Si lo que quieres es que se sigan tratando las excepciones como hasta ahora se debe hacer una llamada a un método para que todo siga igual ya que previamente la configuración que había en el fichero ‘~/app/Config/core.php‘ indicaba que el método que manejaba las excepciones se llamaba ‘handleException‘ y estaba en la clase ‘ErrorHandler‘. Por tanto nuestro manejador de excepciones quedaría de la siguiente forma, realizando una llamada al método original que tiene heredado:
PHP |copy code |?
01 <?php
02 class MyExceptionHandler extends ErrorHandler{03 public static function handle($error) {04 // Ejecutar método heredado que manejaba las excepciones
05 parent::handleException($error);06 // Hacer las acciones que se quieran: mensajes de log...
07 / ...08 }
09 }
10 ?>
Si tienes alguna duda, queja o sugerencia déjanos tu comentario y te contestaremos gustosamente.
Deja tu comentario