Slik bruker du Symfony Event Dispatcher til PHP

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.

Hva er Symfony Event Dispatcher Component?

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.

Installere og konfigurere hendelsesdisplayet

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.

Hvordan lage, sende og hør på hendelser

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.

Eventklassen

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.

The Listener Class

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.

En eksempelfil

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.

Hva er en hendelses abonnent?

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.

Abonnentklassen

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.

En eksempelfil

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.

Konklusjon

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!