Capturando excepciones en Symfony 1.4

JP Juan Pablo Romero Juan Pablo Romero

Juan Pablo Romero

Software Engineer
1 min read.

Gracias 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 (

lista completa

) 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

JP Juan Pablo Romero 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.

Newsletter

Subscribe to our newsletter:

Read more

Portal EmiConecta

AxiaCore ha finalizado otro de sus proyectos, el Portal Web de EmiConecta para Colombia y Uruguay. Para nosotros es un orgull...

1 min read.

Visualización Crepes & Waffles

Para nosotros fue un orgullo desarrollar el portal internacional de Crepes & Waffles, el cual será lanzado el próximo mes de ...

1 min read.

Build Once. Own Forever.