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é..
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..
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.
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..
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..
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.
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.
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 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.
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.
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!