Capturar evento logout y login en Symfony
Juan Pablo Romero
Software EngineerEste es un post muy corto, en donde comentaré de forma muy rápida como capturar los eventos logout y login en Symfony (puedes leer una introducción al manejo de eventos con Symfony), particularmente cuando se usa el plugin sfGuardUser (bien sea con Propel o Doctrine). Lo primero que se debe tener en cuenta, es sobreescribir el método signOut o signIn (dependiendo de que evento queramos capturar) de la clase sfGuardSecurityUser, modificando la clase myUser de nuestra aplicación. Como ejemplo, sobreescribiré el método
signOut:
<!--?php-->//Archivo ubicado en: SYMFONY_ROOT/apps/mi_aplicacion/lib/myUser.class.php
class myUser extends sfGuardSecurityUser
{
public function signOut()
{
$this->dispatcher->notify(new sfEvent(
$this,
'user.logout',
array('user_id' => $this->getGuardUser()->id)
));
parent::signOut();
}
}
Con esto estamos notificando al objeto sfEventDispatcher la ocurrencia del evento user.logout desde la clase myUser (primer parámetro del constructor de sfEvent) y estamos pasando como información el identificador del usuario. Posteriormente, debemos asociar un listener a ese evento, el cual lo podemos definir en la clase que configura nuestra aplicación:
<!--?php-->// Archivo ubicado en: SYMFONY_ROOT/apps/mi_aplicacion/config/mi_aplicacionConfiguration.class.php
class mi_aplicacionConfiguration extends sfApplicationConfiguration
{
public function configure()
{
$this->dispatcher->connect('user.logout', array('Eventos','test'));
}
}
Con esto cada vez que un usuario cierre sesión, se ejecutará el método test de la clase Eventos, el cual deberá recibir como parámetro un objeto de la clase sfEvent. La misma implementación aplicará para el método signIn, para el caso en que el usuario inicie sesión. Espero 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.