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.
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.
Î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.
Î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.
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.
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ă.
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.
Î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ă.
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.
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.
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!