Cum se folosește Symfony Event Dispatcher pentru PHP

Astăzi, vom învăța cum să utilizați componenta Symfony pentru expeditorul evenimentului, care vă permite să creați evenimente și ascultători în aplicațiile dvs. PHP. Astfel, diferitele componente ale aplicației dvs. pot vorbi unul cu celălalt cu un cod cuplat în mod liber.

Ce este Componenta Symfony Event Dispatcher?

S-ar putea să fiți familiarizați cu modelul de observator de eveniment, care vă permite să definiți ascultătorii pentru evenimentele generate de sistem, astfel încât acestea să fie executate atunci când evenimentul este declanșat. În mod similar, componenta Symfony EventDispatcher vă permite să configurați un sistem în care să puteți crea evenimente personalizate și ascultători. În acest fel, permiteți componentelor din aplicația dvs. să reacționeze dacă ceva se întâmplă într-un sistem.

De fapt, componenta dispatcher pentru evenimente oferă trei elemente pe care le puteți construi arhitectura app în jurul valorii:eveniment, ascultător și dispecer. Întregul sistem este orchestrat de clasa dispecer, care ridică evenimente la punctele adecvate dintr-o aplicație și îi cheamă pe ascultători asociați cu acele evenimente.

Să presupunem că doriți să permiteți altor componente din aplicația dvs. să reacționeze la ștergerea memoriei cache. În acest caz, trebuie să definiți în primul rând evenimentul de memorie cache clar. După ștergerea memoriei cache, puteți utiliza dispecerul pentru a ridica evenimentul limpede de memorie cache și care anunță toți ascultătorii care ascultă acest eveniment. Acest lucru oferă posibilitatea ascultătorilor de a șterge cache-urile specifice componentelor.

În acest articol, vom explora elementele de bază ale componentei expeditorului evenimentului. Vom începe cu instalarea și configurarea și vom crea, de asemenea, câteva exemple din lumea reală pentru a demonstra toate conceptele menționate mai sus.

Instalarea și configurarea Dispatcherului de evenimente

În această secțiune, vom instala componenta dispecerului evenimentului. Presupun că ați instalat deja Compozitor în sistemul dvs., pentru că vom avea nevoie de instalarea componentei EventDispatcher.

Odată ce ați instalat Compozitor, continuați și instalați componenta EventDispatcher utilizând următoarea comandă.

$ compozitorul are nevoie de symfony / event-dispatcher

Ar fi trebuit să creeze composer.json fișier, care ar trebui să arate astfel:

"necesită": "symfony / event-dispatcher": "^ 4.1"

Să editați în continuare composer.json fișierul să arate astfel:

"necesită": "simfony / event-dispatcher": "^ 4.1", "autoload": "src "]

Pe măsură ce am adăugat o nouă intrare de clasă, continuați și actualizați comanda autoloader executând următoarea comandă.

comisionul compozitorului $ -o

Acum, puteți folosi EventDispatchers spațiu de nume la clasele de autoreglare în cadrul src director.

Deci asta este partea de instalare, dar cum ar trebui să o folosești? De fapt, este doar o chestiune de a include autoload.php fișier creat de Compozitor în aplicația dvs., așa cum se arată în fragmentul următor.

Cum să creați, expediați și să ascultați evenimente

În această secțiune, vom trece printr-un exemplu care demonstrează modul în care puteți crea un eveniment personalizat și puteți configura un ascultător pentru acel eveniment.

Clasa de evenimente

Pentru început, continuați și creați src / Evenimente / DemoEvent.php fișier cu următorul conținut.

foo = 'bar';  funcția publică getFoo () return $ this-> foo; 

Obiceiul nostru DemoEvent clasa extinde nucleul Eveniment clasa componentei EventDispatcher. NUME constantă deține numele evenimentului nostru personalizat-demo.event. Este folosit atunci când doriți să configurați un ascultător pentru acest eveniment.

Clasa Listener

Apoi, să creăm clasa ascultătorilor src / Ascultătorii / DemoListener.php cu următorul conținut.

getFoo () "\ n".; 

DemoListener clasa implementează onDemoEvent metoda care este declanșată atunci când sistemul expediază DemoEvent eveniment. Desigur, nu se va întâmpla în mod automat încă, deoarece trebuie să vă înregistrați DemoListener ascultător pentru a asculta demo.event eveniment folosind clasa EventDispatcher.

Până acum, am creat cursuri de evenimente și ascultători. În continuare, vom vedea cum să legăm toate aceste piese împreună.

Un exemplu de fișier

Să creăm basic_example.php fișier cu următorul conținut.

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

EventDispatcher este cel mai important element din componenta EventDispatcher - vă permite să asociați ascultătorilor evenimentele pe care doresc să le asculte. Am folosit-o addListener metodă a EventDispatcher clasa pentru a asculta demo.event eveniment.

Primul argument al addListener metoda este un nume de eveniment, iar al doilea argument este PHP-ul care se declanșează atunci când evenimentul înregistrat este expediat. În cazul nostru, am oferit DemoListener obiect ca un ascultător împreună cu onDemoEvent metodă.

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

În cele din urmă, am folosit expediere metodă a EventDispatcher clasa de a expedia demo.event eveniment.

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

Când rulați basic_example.php fișier, ar trebui să producă următoarea ieșire.

$ php basic_example.php DemoListener se numește! Valoarea foo este: bar

Așa cum era de așteptat, onDemoEvent metodă a DemoListener clasa este numită, iar aceasta la rândul ei numește getFoo metodă a DemoEvent clasă pentru a prelua informațiile legate de eveniment.

Ce este un abonat al evenimentului??

În secțiunea anterioară, am construit un exemplu care a demonstrat cum să creați un eveniment personalizat și un ascultător personalizat. Am discutat, de asemenea, despre cum să legăm un ascultător de evenimentul specific folosind EventDispatcher clasă.

Acesta a fost un exemplu simplu, deoarece am vrut doar să înființez un ascultător pentru un singur eveniment. Pe de altă parte, dacă doriți să configurați ascultători pentru mai multe evenimente sau doriți să grupați logic logica de manipulare a evenimentului într-o singură clasă, trebuie să luați în considerare utilizarea abonaților evenimentului, deoarece acestea vă permit să păstrați totul într-un singur loc.

În această secțiune, vom revizui exemplul care a fost creat în secțiunea anterioară.

Clasa Abonat

Primul lucru pe care trebuie să-l facem este să creăm o clasă de abonați care implementează EventSubscriberInterface interfață. Continuați și creați src / Subsribers / DemoSubscriber.php clasa așa cum se arată în fragmentul următor.

 'onDemoEvent',);  funcția publică onDemoEvent (evenimentul DemoEvent $) // preluarea informațiilor despre eveniment aici echo "DemoListener se numește! \ n"; echo "Valoarea foo este:". $ event-> getFoo (). "\ n"; 

Din clasă DemoSubscriber implementează EventSubscriberInterface trebuie să implementeze getSubscribedEvents metodă. getSubscribedEvents metoda ar trebui să returneze o serie de evenimente la care doriți să vă abonați. Trebuie să furnizați numele evenimentului într-o cheie de matrice și numele metodei într-o valoare de matrice care se numește atunci când evenimentul este declanșat.

Ultimul lucru este implementarea metodei ascultătorilor din aceeași clasă. În cazul nostru, trebuie să implementăm onDemoEvent și deja am făcut asta.

Un exemplu de fișier

Este timpul să vă testați abonatul! Să creăm rapid subscriber_example.php fișier cu următorul conținut.

addSubscriber ($ abonat); // expediere $ dispatcher-> dispatch (DemoEvent :: NAME, noul DemoEvent ());

Trebuie să utilizați addSubscriber metodă a EventDispatcher pentru a vă abona abonatul personalizat și EventDispatcher clasa se ocupă de restul. Efectuează evenimente care urmează să fie subscrise de la getSubscribedEvents și stabilește ascultători pentru acele evenimente. În afară de asta, totul este același și ar trebui să funcționeze așa cum era de așteptat, fără surprize.

Să încercăm!

$ php subscriber_example.php DemoListener este numit! Valoarea foo este: bar

Și acesta a fost un abonat la dispoziție! Asta ne aduce și la sfârșitul acestui articol.

Concluzie

Astăzi, am explorat componenta Symfony dispatcher event, care vă permite să configurați evenimente și ascultători în aplicațiile dvs. PHP. Folosind această bibliotecă, puteți crea un sistem cuplat în mod liber, care permite componentelor aplicației dvs. să comunice fără efort.

Simțiți-vă liber să vă împărtășiți gândurile și interogările utilizând formularul de mai jos!

Cod