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.
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 ihå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 innloggingSå 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:
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.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 tilApp \ Hendelser \ ClearCache
begivenhet. Dermed erhåndtak
metode avApp \ 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 tilabonnere
Metoden er forekomsten avBelyse \ Hendelser \ Dispatcher
klasse som du kan bruke til å binde hendelser med lyttere ved hjelp avlytte
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.
!