I dag skal vi lære hvordan du bruker komponenten Symfony event dispatcher, som lar deg lage hendelser og lyttere i PHP-applikasjonene dine. Dermed kan forskjellige komponenter i søknaden din snakke med hverandre med løst koblet kode.
Du kan være kjent med hendelsesmatchemønsteret, som lar deg definere lyttere for systemgenererte hendelser slik at de utføres når hendelsen utløses. På samme måte lar Symphony EventDispatcher-komponenten deg å sette opp et system der du kan opprette egendefinerte hendelser og lyttere. På den måten tillater du at komponenter i søknaden din reagerer hvis noe skjer i et system.
Faktisk inneholder hendelsesleverandørkomponenten tre elementer som du kan bygge din apparkitektur rundt:hendelse, lytter og sender. Hele systemet er orkestrert av dispatcher-klassen, som hever hendelser på passende punkter i en applikasjon, og kaller lyttere tilknyttet disse hendelsene.
La oss anta at du vil tillate andre komponenter i søknaden din å reagere når hurtigbufferen er slettet. I så fall må du definere klar cache-hendelse i utgangspunktet. Etter at cachen er slettet, kan du bruke dispatcheren til å heve clear cache-hendelse, og det underretter alle lyttere som lytter til denne hendelsen. Dette gir lyttere muligheten til å rense komponentspesifikke cacher.
I denne artikkelen vil vi utforske grunnleggende om hendelsesleverandørkomponenten. Vi starter med installasjon og konfigurasjon, og vi vil også lage noen eksempler på ektefeller for å demonstrere alle de ovennevnte begrepene.
I denne delen skal vi installere hendelsesleverandørkomponenten. Jeg antar at du allerede har installert Komponist på systemet, fordi vi trenger det for å installere EventDispatcher-komponenten.
Når du har installert Komponist, fortsett og installer EventDispatcher-komponenten ved hjelp av følgende kommando.
$ komponist krever sympfony / event-dispatcher
Det burde ha skapt composer.json fil, som skal se slik ut:
"krever": "sympfony / event-dispatcher": "^ 4.1"
La oss videre redigere composer.json filen for å se ut som følgende:
"krav": "sympfony / event-dispatcher": "^ 4.1", "autoload": "psr-4": "EventDispatchers \\": "src", "klassekart" "]
Når vi har lagt til en ny klassekartoppføring, fortsett og oppdater Composer autoloader ved å kjøre følgende kommando.
$ komponent dump -o
Nå kan du bruke EventDispatchers
namespace til autoload klasser under src katalog.
Så det er installasjonsdelen, men hvordan skal du bruke den? Faktisk er det bare et spørsmål om å inkludere autoload.php fil opprettet av Komponist i din søknad, som vist i følgende utdrag.
I dette avsnittet går vi gjennom et eksempel som viser hvordan du kan opprette en tilpasset hendelse og sette opp en lytter for den hendelsen.
Til å begynne med, gå videre og opprett src / Arrangement / DemoEvent.php fil med følgende innhold.
foo = 'bar'; offentlig funksjon getFoo () return $ this-> foo;
Våre egendefinerte DemoEvent
klassen utvider kjernen Begivenhet
klasse av EventDispatcher-komponenten. De NAVN
konstant holder navnet på vår egendefinerte begivenhet-demo.event
. Den brukes når du vil sette opp en lytter for denne hendelsen.
Neste, la oss lage lytterklassen src / lytterne / DemoListener.php med følgende innhold.
getFoo () "\ n".;
De DemoListener
klassen implementerer onDemoEvent
Metode som utløses når systemet sender DemoEvent
begivenhet. Selvfølgelig vil det ikke skje automatisk enda, siden vi må registrere DemoListener
lytter til å høre demo.event
arrangement ved hjelp av EventDispatcher-klassen.
Så langt har vi laget hendelses- og lytterklasser. Deretter ser vi hvordan du knytter alle disse brikkene sammen.
La oss lage basic_example.php fil med følgende innhold.
addListener ('demo.event', array ($ lytter, 'onDemoEvent')); // dispatch $ dispatcher-> dispatch (DemoEvent :: NAME, new DemoEvent ());
De EventDispatcher
klassen er det viktigste elementet i EventDispatcher-komponenten. Det lar deg binde lyttere til hendelser de vil lytte til. Vi har brukt addListener
metode av EventDispatcher
klasse for å lytte til demo.event
begivenhet.
Det første argumentet til addListener
Metoden er et hendelsesnavn, og det andre argumentet er PHP callable som utløses når den registrerte hendelsen sendes. I vårt tilfelle har vi gitt DemoListener
objekt som lytter sammen med onDemoEvent
metode.
$ dispatcher-> addListener ('demo.event', array ($ lytter, 'onDemoEvent'));
Til slutt har vi brukt utsendelse
metode av EventDispatcher
klasse for å sende den demo.event
begivenhet.
$ dispatcher-> dispatch (DemoEvent :: NAME, new DemoEvent ());
Når du kjører basic_example.php fil, bør den produsere følgende utgang.
$ php basic_example.php DemoListener kalles! Verdien av foo er: bar
Som forventet, vil onDemoEvent
metode av DemoListener
klassen kalles, og det kalles i sin tur getFoo
metode av DemoEvent
klassen for å hente hendelsesrelatert informasjon.
I det forrige avsnittet bygde vi et eksempel som viste hvordan man lager en tilpasset hendelse og en tilpasset lytter. Vi diskuterte også hvordan du binder en lytter til den spesifikke hendelsen ved hjelp av EventDispatcher
klasse.
Det var et enkelt eksempel, da vi bare ønsket å sette opp en lytter for en enkelt hendelse. På den annen side, hvis du vil sette opp lyttere for flere hendelser eller du logisk skal gruppere hendelseshåndteringslogikk i en enkelt klasse, bør du vurdere å bruke hendelsesabonnenter fordi de tillater deg å holde alt på ett sted.
I denne delen reviderer vi eksemplet som ble opprettet i forrige seksjon.
Det første vi må gjøre er å skape en abonnentklasse som implementerer EventSubscriberInterface
grensesnitt. Gå videre og opprett src / subsribers / DemoSubscriber.php klassen som vist i følgende utdrag.
'on DemoEvent',); offentlig funksjon onDemoEvent (DemoEvent $ event) // hente hendelsesinformasjon her ekko "DemoListener heter! \ n"; ekko "Verdien av foo er:". $ event-> getFoo (). "\ n";
Siden klassen DemoSubscriber
implementerer EventSubscriberInterface
grensesnitt, må det implementere getSubscribedEvents
metode. De getSubscribedEvents
Metoden skal returnere en rekke arrangementer du vil abonnere på. Du må angi hendelsesnavnet i en array-nøkkel og metodenavnet i en array-verdi som kalles når hendelsen utløses.
Det siste er å implementere lytteremetoden i samme klasse. I vårt tilfelle må vi implementere onDemoEvent
metode, og vi har allerede gjort det.
Det er på tide å teste abonnenten vår! La oss raskt lage subscriber_example.php fil med følgende innhold.
addSubscriber ($ abonnent); // dispatch $ dispatcher-> dispatch (DemoEvent :: NAME, new DemoEvent ());
Du må bruke addSubscriber
metode av EventDispatcher
klasse for å abonnere din egendefinerte abonnent, og EventDispatcher
klassen håndterer resten. Det henter hendelser som skal abonneres fra getSubscribedEvents
metode og setter opp lyttere for disse hendelsene. Bortsett fra det er alt det samme, og det skal fungere som forventet uten overraskelser.
La oss teste det!
$ php abonnent_example.php DemoListener kalles! Verdien av foo er: bar
Og det var en hendelse abonnent til din disposisjon! Det bringer oss også til slutten av denne artikkelen.
I dag har vi utforsket komponenten Symfony event dispatcher, som lar deg sette opp hendelser og lyttere i PHP-applikasjonene. Ved å bruke dette biblioteket kan du opprette et løst koblet system som gjør at komponentene i applikasjonen din kan kommunisere med hverandre uten problemer.
Du er velkommen til å dele dine tanker og spørsmål ved hjelp av skjemaet nedenfor!