Dans ce tutoriel nous allons découvrir comment mettre en place un système d'évènements / observeurs en PHP. Lorsque certaines action-clefs sont effectuées sur notre application nous allons émettre un évènement. On pourra ensuite observer le déclenchement de ces évènements et effectuer un traitement particulier.

$emitter = Emitter::getInstance();
$emitter->on('User.created', function ($user) {
  // Code à effectuer quand un utilisateur a été créé 
  // (envoyer un email, envoyer une notification...)
});

// ...

// Lorsqu'un utilisateur est créé on se contente d'émettre un évènement
$emitter->emit('User.created', $user);

Cette manière d'organiser le code permet de mieux séparer la logique et de réduire le nombre de dépendances. Lorsque l'on construit le système de création de compte par exemple, on se contentera simplement d'émettre un évènement. On pourra ensuite agrémenter le fonctionnement de notre système en rajoutant des écouteurs à cet évènement.

Il sera même possible de créer une classe permettant de s'abonner à plusieurs évènements.

class MonSuperSubscriber implements \Event\SubscriberInterface {

    public function getEvents(): array
    {
        return [
            'Comment.created' => 'onNewComment',
            'Post.created'    => 'onNewPost'
        ];
    }

    public function onNewComment($comment): void
    {
        // Code à effectuer lors de la création d'un commentaire    
    }

    public function onNewPost($post): void
    {
        // Code à effectuer lors de la création d'un article    
    }

}