Egendefinerte hendelser i Laravel

I denne artikkelen skal vi utforske grunnleggende hendelsesledelse i Laravel. Det er en av de viktige funksjonene som du, som utvikler, burde ha i ditt arsenal i ønsket rammeverk. Når vi går videre, tar vi også muligheten til å skape et ekte eksempel på en tilpasset hendelse og lytter, og det er det ultimate målet med denne artikkelen også.

Begrepet hendelser i Laravel er basert på et meget populært programvaredesignmønster - observatørmønsteret. I dette mønsteret skal systemet øke hendelser når noe skjer, og du kan definere lyttere som lytter til disse hendelsene og reagerer tilsvarende. Det er en veldig nyttig funksjon på en måte som lar deg avkoble komponenter i et system som ellers ville ha resultert i tett koblet kode.

For eksempel, si at du vil varsle alle modulene i et system når noen logger på nettstedet ditt. Dermed tillater de at de reagerer på denne påloggingshendelsen, enten det handler om å sende en e-post eller melding i appen eller for det saks skyld alt som vil reagere på denne påloggingshendelsen.

Grunnleggende om hendelser og lyttere

I denne delen vil vi utforske Laravels måte å implementere hendelser og lyttere på i kjernevirksomheten. Hvis du er kjent med Laravel-arkitekturen, vet du sikkert at Laravel implementerer konseptet til en tjenesteleverandør som lar deg injisere ulike tjenester i en applikasjon.

På samme måte gir Laravel en innebygd EventServiceProvider.php klassen som gjør at vi kan definere hendelseslyttermapperinger for et program.

Gå videre og trekk inn app / Leverandører / EventServiceProvider.php fil.

 ['App \ Listeners \ EventListener',],]; / ** * Registrer eventuelle hendelser for din søknad. * * @return void * / public function boot () foreldre :: boot (); //

La oss ta en nærmere titt på $ lytte eiendom, som lar deg definere en rekke hendelser og tilhørende lyttere. Matrise-tastene tilsvarer hendelser i et system, og deres verdier samsvarer med lyttere som vil bli utløst når den tilsvarende hendelsen blir hevet i et system.

Jeg foretrekker å gå gjennom et ekteeksempel for å demonstrere det videre. Som du sikkert vet, gir Laravel et innebygd autentiseringssystem som letter funksjoner som innlogging, register og lignende.

Anta at du vil sende e-postvarslingen, som et sikkerhetsmål, når noen logger inn i programmet. Hvis Laravel ikke støttet hendelseslytterfunksjonen, kan det hende du har endt opp med å redigere kjerneklassen eller en annen måte å koble inn koden din som sender en epost.

Faktisk er du på luckier siden Laravel hjelper deg med å løse dette problemet ved hjelp av hendelseslytteren. La oss revidere app / Leverandører / EventServiceProvider.php filen for å se ut som følgende.

 ['App \ Listeners \ SendEmailNotification',],]; / ** * Registrer eventuelle hendelser for din søknad. * * @return void * / public function boot () foreldre :: boot (); //

Belyse \ Auth \ Hendelser \ Pålogging er en hendelse som vil bli hevet av Auth plugin når noen logger inn i et program. Vi har bundet denne hendelsen til App \ Lyttere \ SendEmailNotification lytter, så det blir utløst på påloggingsbegivenheten.

Selvfølgelig må du definere App \ Lyttere \ SendEmailNotification lytterklasse i første omgang. Som alltid lar Laravel deg opprette en malekode til en lytter ved hjelp av artisan-kommandoen.

php artisan hendelse: generere

Denne kommandoen genererer hendelses- og lytterklasser som er oppført under $ lytte eiendom.

I vårt tilfelle, Belyse \ Auth \ Hendelser \ Pålogging Hendelsen eksisterer allerede, så det skaper bare App \ Lyttere \ SendEmailNotification lytterklasse. Faktisk ville det ha skapt Belyse \ Auth \ Hendelser \ Pålogging event klasse også hvis den ikke eksisterte i første omgang.

La oss ta en titt på lytterklassen opprettet på app / Lyttere / SendEmailNotification.php.

Det er håndtak metode som vil bli påkalt med passende avhengigheter når lytteren utløses. I vårt tilfelle, $ event Argumentet bør inneholde kontekstuell informasjon om påloggingsarrangementet - logget inn brukerinformasjon.

Og vi kan bruke $ event motsette seg å utføre videre behandling i håndtak metode. I vårt tilfelle ønsker vi å sende e-postvarsling til den innloggede brukeren.

Den reviderte håndtak Metoden kan se ut som:

Offentlig funksjonshåndtak (Logg inn $ hendelse) // Bli logget inn brukerens epost og brukernavn $ email = $ event-> user-> email; $ brukernavn = $ event-> bruker-> navn; // send e-postvarsling om innlogging

Så det er slik du skal bruke hendelsesfunksjonen i Laravel. Fra neste avsnitt videre, fortsetter vi og lager en tilpasset hendelse og tilhørende lytterklasse.

Lag en tilpasset hendelse

Eksemplar scenariet som vi skal bruke til vårt eksempel er noe slikt:

  • Et program må fjerne cacher i et system på bestemte punkter. Vi vil heve CacheClear arrangement sammen med kontekstuell informasjon når et program gjør det ovenfor nevnte. Vi sender passordgruppens nøkler sammen med en hendelse som ble slettet.
  • Andre moduler i et system kan lytte til CacheClear arrangement og vil gjerne implementere kode som varmes opp relaterte cacher.

La oss se på nytt app / Leverandører / EventServiceProvider.php fil og registrer våre tilpassede arrangement og listener lister.

 ['App \ Listeners \ WarmUpCache',],]; / ** * Registrer eventuelle hendelser for din søknad. * * @return void * / public function boot () foreldre :: boot (); //

Som du kan se, har vi definert App \ Hendelser \ ClearCache hendelse og tilhørende lytterklasse App \ Lyttere \ WarmUpCache under $ lytte eiendom.

Deretter må vi opprette tilhørende klassefiler. Husk at du alltid kan bruke artisan-kommandoen til å generere en base malkode.

php artisan hendelse: generere

Det burde ha skapt arrangementsklassen på app / Events / ClearCache.php og lytterklassen på app / Lyttere / WarmUpCache.php.

Med noen få endringer, app / Events / ClearCache.php klassen skal se slik ut:

cache_keys = $ cache_keys;  / ** * Få kanalene hendelsen skal kringkaste på. * * @return Channel | array * / public function broadcastOn () returnere nye PrivateChannel ('kanalnavn'); 

Som du sikkert har lagt merke til, har vi lagt til en ny eiendom $ cache_keys som vil bli brukt til å holde informasjon som skal sendes sammen med en hendelse. I vårt tilfelle vil vi passere cache grupper som ble spylt.

Neste, la oss se på lytterklassen med en oppdatert håndtak metode på app / Lyttere / WarmUpCache.php.

cache_keys) && count ($ event-> cache_keys)) foreach ($ event-> cache_keys som $ cache_key) // generere cache for denne nøkkelen // warm_up_cache ($ cache_key)

Når lytteren påberopes, vil håndtak Metoden er bestått med forekomsten av den tilknyttede hendelsen. I vårt tilfelle bør det være forekomsten av Tøm cache Event som vil bli bestått som det første argumentet til håndtak metode.

Deretter er det bare et spørsmål om iterating gjennom hver cache-nøkkel og oppvarming av tilknyttede cacher.

Nå har vi alt for å teste ting mot. La oss raskt lage en kontrollerfil på app / Http / kontrollere / EventController.php å demonstrere hvordan du kan hente en hendelse.

For det første har vi passert en rekke hurtigbuffertaster som det første argumentet mens du oppretter en forekomst av Tøm cache begivenhet.

Hendelseshjelpsfunksjonen brukes til å hente en hendelse hvor som helst i et program. Når hendelsen blir hevet, kaller Laravel alle lytterne å lytte til den aktuelle hendelsen.

I vårt tilfelle, App \ Lyttere \ WarmUpCache lytteren er satt til å lytte til App \ Hendelser \ ClearCache begivenhet. Dermed er håndtak metode av App \ Lyttere \ WarmUpCache lytteren påberopes når hendelsen heves fra en kontroller. Resten er å varme opp cacher som ble ryddet!

Så det er slik du kan lage egendefinerte hendelser i søknaden din og jobbe med dem.

Hva er en hendelses abonnent?

Hendelsesabonnenten lar deg abonnere flere hendelselyttere på et enkelt sted. Enten du vil logge gruppevisning av høringslister, eller du vil inneholde voksende hendelser på ett sted, er det hendelsesabonnenten du leter etter.

Hvis vi hadde implementert eksemplene som ble diskutert så langt i denne artikkelen ved hjelp av hendelsesabonnenten, kan det se slik ut.

bruker-> e-post; $ brukernavn = $ event-> bruker-> navn; // send e-postvarsling om innlogging ... / ** * Håndter brukerlogg hendelser. * / offentlig funksjon warmUpCache ($ event) if (isset ($ event-> cache_keys) && count ($ event-> cache_keys)) foreach ($ event-> cache_keys som $ cache_key) // generere cache for denne nøkkelen // warm_up_cache ($ cache_key) / ** * Registrer lytterne for abonnenten. * * @param Illuminate \ Events \ Dispatcher $ events * / offentlig funksjon abonnere ($ events) $ events-> listen ('Illuminate \ Auth \ Events \ Login', 'App \ Listeners \ ExampleEventSubscriber @ sendEmailNotification'); $ events-> listen ('App \ Events \ ClearCache', 'App \ Listeners \ ExampleEventSubscriber @ warmUpCache'); 

Det er abonnere Metode som er ansvarlig for registrering av lyttere. Det første argumentet til abonnere Metoden er forekomsten av Belyse \ Hendelser \ Dispatcher klasse som du kan bruke til å binde hendelser med lyttere ved hjelp av lytte metode.

Det første argumentet til lytte Metoden er en hendelse som du vil lytte til, og det andre argumentet er en lytter som vil bli kalt når hendelsen heves.

På denne måten kan du definere flere hendelser og lyttere i selve abonnentklassen.

Hendelsesabonnentklassen vil ikke bli hentet automatisk. Du må registrere det i EventServiceProvider.php klasse under $ abonnent eiendom, som vist i følgende utdrag.

Så det var hendelsen abonnentklassen til din disposisjon, og med det har vi nådd slutten av denne artikkelen også.

Konklusjon

I dag har vi diskutert et par spennende trekk ved Laravel-hendelser og lyttere. De er basert på observatørdesignmønsteret som gjør det mulig å heve hendelser over hele applikasjonen og tillate andre moduler å lytte til hendelsene og reagere tilsvarende.

Bare komme opp i fart i Laravel eller ser ut til å utvide din kunnskap, nettsted eller applikasjon med utvidelser? Vi har en rekke ting du kan studere i Envato Market.

!