Capturando excepciones en Symfony 1.4
Juan Pablo Romero
Software EngineerGracias al componente sfEventDispatcher que se encuentra integrado en Symfony 1.x (desde la versión 1.2) es posible capturar eventos (a manera de hooks) de forma muy sencilla. Voy a explicar rápidamente como podemos capturar eventos asociados a excepciones que regularmente implican errores cuyo código de salida es 500.
Primero que todo, Symfony incluye una serie de eventos (
) genéricos que notifican varias tareas comúnes como: procesamiento de formularios y filtros, ejecución de tareas, etc. Para este caso particular, vamos a centrarnos en el evento:
application.throw_exception
el cual es notificado cuando se captura una excepción (por ejemplo de tipo sfFileException). Para poder capturar este evento, lo que debemos hacer es establecer un observador que se encargue de capturar el evento y procesarlo. Para ello simplemente agregamos en la clase de configuración del proyecto (o de la aplicación):
class miAplicacionConfiguration extends sfApplicationConfiguration
{
public function configure()
{
$this->dispatcher->connect(
'application.throw_exception', array(
'MiClaseObservador','metodoObservador')
}
}
Cada vez que ocurra una excepción, el método metodoObservador de la clase MiClaseObservador será llamado, cuyo parámetro será un objeto sfEvent. A continuación la implementación de la clase y el método:
class MiClaseObservador
{
public static function metodoObservador(sfEvent $event)
{
$mailer = sfContext::getInstance()->;getMailer();
// Se obtiene la instancia del objeto que notifica el error, un ejemplar de una clase que extiende la clase
// Exception de PHP
$subject = $event->getSubject();
$message = $subject->getMessage() . $subject->getTraceAsString();
$mailer->composeAndSend('info@example.com', 'developers@example.com', 'An error has been occurred', $message);
}
}
El código anterior envía un correo electrónico notificando del error, muy útil para entornos de prueba. El mensaje incluye el mensaje de error y el trace. Esperamos sea de utilidad.
Written by Juan Pablo Romero
Juan Pablo designs and builds robust software solutions with a focus on performance and usability. His problem-solving skills and attention to detail ensure high-quality and efficient applications.