Utiliser le système d’évènements de Symfony

Le système d’évènements de Symfony est une avancée particulièrement intéressante dans le framework. Toutefois, la documentation officielle est un peu spartiate sur le domaine. Voici donc un exemple pratique plus didactique pour utiliser les évènements.

Le système d’évènement de Symfony est basé sur le motif de programmation observer qui est un grand classique du genre.

Tout d’abord, il faut enregistrer le listener. On peut le faire à peu près n’importe ou, par exemple dans le preExecute du code d’un contrôleur, ou plus globalement dans le fichier config/ProjectConfiguration.class.php qui va gérer la configuration globale de votre projet.

    
class ProjectConfiguration extends sfProjectConfiguration
{
  public function setup()
  {
    // listener
    if (!sfConfig::get('already_event_connected', false))
    {
      $this->getEventDispatcher()->connect('a.name', 'aclass::dosomething');
      sfConfig::set('already_event_connected', true);
    }
  }
}

Ce code vous assure que le listener sera enregistré une unique fois. En effet, si il est enregistré deux fois, a chaque notification il sera exécuté deux fois ….

Ensuite, n’importe ou dans votre code, vous pouvez « lancer » cet évènement. Par exemple, dans le code d’un contrôleur.

    // notification
    sfContext::getInstance()->getEventDispatcher()->notify(new sfEvent(get_class($this), 'a.name', 
    array(
      'a_var' => $foo,
      'another_var' => $bar,
    )));

La fonction de callback, ici une méthode statique, récupère un objet sfEvent en paramètre. Via ce dernier, on a également accès aux variables passées lors de la notification de l’évènement.

// dans la classe aclass
public static function dosomething (sfEvent $event)
{
  $foo = $event['a_var'];
  $bar = $event['another_var'];
  // code
}

Et voilà, à vous de jouer.

Publicités

Une réflexion au sujet de « Utiliser le système d’évènements de Symfony »

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s