Comment utiliser le répartiteur d'événements Symfony pour PHP

Aujourd'hui, nous allons apprendre à utiliser le composant répartiteur d'événements Symfony, qui vous permet de créer des événements et des écouteurs dans vos applications PHP. Ainsi, différents composants de votre application peuvent communiquer entre eux avec un code faiblement couplé..

Qu'est-ce que le composant Symfony Event Dispatcher??

Vous connaissez peut-être le modèle observateur d'événement, qui vous permet de définir des écouteurs pour les événements générés par le système afin qu'ils soient exécutés lorsque l'événement est déclenché. De même, le composant Symfony EventDispatcher vous permet de configurer un système dans lequel vous pouvez créer des événements et des écouteurs personnalisés. De cette manière, vous permettez aux composants de votre application de réagir si quelque chose se passe dans un système.

En fait, le composant de répartition des événements fournit trois éléments sur lesquels vous pouvez construire l'architecture de votre application.:événement, auditeur et répartiteur. L'ensemble du système est orchestré par la classe dispatcher, qui déclenche des événements aux points appropriés d'une application et appelle les écouteurs associés à ces événements..

Supposons que vous souhaitiez permettre aux autres composants de votre application de réagir lorsque le cache est effacé. Dans ce cas, vous devez définir l'événement Clear Cache en premier lieu. Une fois le cache effacé, vous pouvez utiliser le répartiteur pour déclencher l'événement d'effacement du cache et informer tous les écouteurs qui écoutent cet événement. Les auditeurs ont ainsi la possibilité de purger les caches spécifiques aux composants..

Dans cet article, nous allons explorer les bases du composant de répartition des événements. Nous allons commencer par l'installation et la configuration, puis créer quelques exemples concrets illustrant tous les concepts mentionnés ci-dessus..

Installation et configuration du répartiteur d'événements

Dans cette section, nous allons installer le composant de répartition des événements. Je suppose que vous avez déjà installé Composer sur votre système, car nous en aurons besoin pour installer le composant EventDispatcher..

Une fois que vous avez installé Composer, installez le composant EventDispatcher à l’aide de la commande suivante..

$ composer require symfony / event-dispatcher

Cela aurait dû créer le composer.json fichier, qui devrait ressembler à ceci:

"require": "symfony / event-dispatcher": "^ 4.1"

Continuons à éditer le composer.json fichier qui ressemble à ce qui suit:

"require": "symfony / event-dispatcher": "^ 4.1", "autoload": "psr-4": "EventDispatchers \\": "src", "classmap": ["src "]

Comme nous avons ajouté une nouvelle entrée de classmap, continuez et mettez à jour l'autochargeur Composer en exécutant la commande suivante..

$ compositeur dump -o

Maintenant, vous pouvez utiliser le EventDispatchers espace de noms pour charger automatiquement les classes sous la src annuaire.

C'est donc la partie installation, mais comment êtes-vous censé l'utiliser? En fait, il s’agit simplement d’inclure le autoload.php fichier créé par Composer dans votre application, comme indiqué dans l'extrait suivant.

Comment créer, distribuer et écouter des événements

Dans cette section, nous allons passer à un exemple qui montre comment créer un événement personnalisé et configurer un écouteur pour cet événement..

La classe de l'événement

Pour commencer, allez-y et créez le src / Events / DemoEvent.php fichier avec le contenu suivant.

foo = 'bar';  fonction publique getFoo () return $ this-> foo; 

Notre coutume DemoEvent la classe étend le noyau un événement classe du composant EventDispatcher. le PRÉNOM constante tient le nom de notre événement personnalisé-demo.event. Il est utilisé lorsque vous souhaitez configurer un écouteur pour cet événement..

La classe d'auditeur

Ensuite, créons la classe d'écoute src / Auditeurs / DemoListener.php avec le contenu suivant.

getFoo (). "\ n"; 

le DemoListener la classe implémente le onDemoEvent méthode qui est déclenchée lorsque le système envoie le message DemoEvent un événement. Bien entendu, cela ne se produira pas encore automatiquement, car nous devons enregistrer le DemoListener auditeur à écouter le demo.event event utilisant la classe EventDispatcher.

Jusqu'à présent, nous avons créé des classes d'événement et d'écoute. Ensuite, nous verrons comment lier toutes ces pièces.

Un exemple de fichier

Créons le exemple_base.php fichier avec le contenu suivant.

addListener ('demo.event', array ($ listener, 'onDemoEvent')); // dispatch $ dispatcher-> dispatch (DemoEvent :: NAME, new DemoEvent ());

le EventDispatcher class est l'élément le plus important du composant EventDispatcher. Il vous permet de lier les écouteurs aux événements qu'ils souhaitent écouter. Nous avons utilisé le addListener méthode du EventDispatcher classe à écouter le demo.event un événement.

Le premier argument de la addListener La méthode est un nom d'événement, et le deuxième argument est l'appelable PHP qui est déclenché lorsque l'événement enregistré est distribué. Dans notre cas, nous avons fourni le DemoListener objet en tant qu'auditeur avec le onDemoEvent méthode.

$ dispatcher-> addListener ('demo.event', array ($ listener, 'onDemoEvent'));

Enfin, nous avons utilisé le envoi méthode du EventDispatcher classe pour envoyer le demo.event un événement.

$ dispatcher-> dispatch (DemoEvent :: NAME, new DemoEvent ());

Lorsque vous exécutez le exemple_base.php fichier, il devrait produire la sortie suivante.

$ php basic_example.php DemoListener est appelé! La valeur du foo est: bar

Comme prévu, le onDemoEvent méthode du DemoListener la classe est appelée, et qui à son tour appelle le getFoo méthode du DemoEvent classe pour récupérer les informations relatives à l'événement.

Qu'est-ce qu'un abonné à un événement??

Dans la section précédente, nous avons construit un exemple montrant comment créer un événement personnalisé et un écouteur personnalisé. Nous avons également expliqué comment lier un écouteur à un événement spécifique à l’aide du EventDispatcher classe.

C'était un exemple simple, car nous voulions uniquement mettre en place un auditeur pour un seul événement. D'autre part, si vous souhaitez configurer des écouteurs pour plusieurs événements ou regrouper logiquement la logique de gestion des événements dans une seule classe, vous devez envisager d'utiliser des abonnés aux événements, car ils vous permettent de tout conserver au même endroit..

Dans cette section, nous allons réviser l’exemple créé dans la section précédente..

La classe d'abonné

La première chose à faire est de créer une classe d’abonnés qui implémente la EventSubscriberInterface interface. Allez-y et créez le src / Subsribers / DemoSubscriber.php classe comme indiqué dans l'extrait suivant.

 'onDemoEvent',);  fonction publique onDemoEvent (événement DemoEvent $) // récupère ici les informations sur l'événement echo "DemoListener s'appelle! \ n"; echo "La valeur du foo est:". $ event-> getFoo (). "\ n"; 

Depuis la classe DemoSubscriber met en œuvre le EventSubscriberInterface interface, il doit mettre en œuvre le getSubscribeEvents méthode. le getSubscribeEvents Cette méthode doit renvoyer un tableau d’événements auxquels vous souhaitez vous abonner. Vous devez fournir le nom de l'événement dans une clé de tableau et le nom de la méthode dans une valeur de tableau appelée lorsque l'événement est déclenché..

La dernière chose à faire est d'implémenter la méthode listener dans la même classe. Dans notre cas, nous devons mettre en œuvre le onDemoEvent méthode, et nous l'avons déjà fait.

Un exemple de fichier

Il est temps de tester notre abonné! Créons rapidement le subscriber_example.php fichier avec le contenu suivant.

addSubscriber ($ abonné); // dispatch $ dispatcher-> dispatch (DemoEvent :: NAME, new DemoEvent ());

Vous devez utiliser le addSubscriber méthode du EventDispatcher classe pour abonner votre abonné personnalisé, et le EventDispatcher la classe s'occupe du reste. Il récupère les événements à souscrire à partir du getSubscribeEvents méthode et met en place des écouteurs pour ces événements. A part ça, tout est pareil, et ça devrait marcher comme prévu sans surprises.

Testons-le!

$ php subscriber_example.php DemoListener est appelé! La valeur du foo est: bar

Et c'était un abonné à votre disposition! Cela nous amène également à la fin de cet article.

Conclusion

Aujourd'hui, nous avons exploré le composant répartiteur d'événements Symfony, qui vous permet de configurer des événements et des écouteurs dans vos applications PHP. En utilisant cette bibliothèque, vous pouvez créer un système faiblement couplé qui permet aux composants de votre application de communiquer entre eux sans effort..

N'hésitez pas à partager vos pensées et vos questions en utilisant le formulaire ci-dessous!