În acest articol, vom explora elementele de bază ale managementului evenimentelor din Laravel. Este una dintre caracteristicile importante pe care tu, ca dezvoltator, ar trebui să le aibă în arsenalul tău în cadrul dorit. Pe măsură ce continuăm, vom profita și de această ocazie pentru a crea un exemplu real al unui eveniment personalizat și al unui ascultător și acesta este scopul final al acestui articol.
Conceptul de evenimente din Laravel se bazează pe un model popular de design software - modelul de observator. În acest model, sistemul ar trebui să genereze evenimente atunci când se întâmplă ceva și puteți defini ascultătorii care ascultă aceste evenimente și reacționează în consecință. Este o caracteristică foarte utilă într-un mod care vă permite să decuplați componentele într-un sistem care altfel ar fi dus la un cod strâns cuplat.
De exemplu, spuneți că doriți să notificați toate modulele dintr-un sistem atunci când cineva se conectează la site-ul dvs. Astfel, le permite să reacționeze la acest eveniment de conectare, indiferent dacă este vorba despre trimiterea unui mesaj de e-mail sau a unei notificări în aplicație sau despre orice altceva care vrea să reacționeze la acest eveniment de conectare.
În această secțiune vom explora modul în care Laravel a implementat evenimente și ascultători în cadrul central. Dacă sunteți familiarizat cu arhitectura Laravel, probabil că știți că Laravel implementează conceptul de furnizor de servicii care vă permite să injectați diferite servicii într-o aplicație.
În mod similar, Laravel oferă un built-in EventServiceProvider.php
clasa care ne permite să definim mapările ascultătorilor de evenimente pentru o aplicație.
Mergeți și trageți app / Furnizori / EventServiceProvider.php
fişier.
['App \ Listeners \ EventListener',],]; / ** * Înregistrați orice evenimente pentru aplicația dvs. * * @return void * / boot funcțional public () parent :: boot (); //
Să aruncăm o privire mai atentă la $ asculta
proprietate, care vă permite să definiți o serie de evenimente și ascultători asociați. Cheile matricei corespund evenimentelor dintr-un sistem, iar valorile lor corespund ascultătorilor care vor fi declanșați atunci când evenimentul corespunzător este ridicat într-un sistem.
Prefer să trec printr-un exemplu din lumea reală pentru ao demonstra mai departe. După cum probabil știți, Laravel oferă un sistem de autentificare încorporat care facilitează caracteristici precum login, registru și altele asemenea.
Să presupunem că doriți să trimiteți notificarea prin e-mail, ca măsură de securitate, atunci când cineva se loghează în aplicație. Dacă Laravel nu a acceptat funcția de ascultător al evenimentului, este posibil să fi terminat editarea clasei de bază sau altfel de conectare a codului care trimite un e-mail.
De fapt, sunteți în partea mai norocoasă, Laravel vă ajută să rezolvați această problemă folosind ascultătorul evenimentului. Să revizuim app / Furnizori / EventServiceProvider.php
fișier pentru a arăta ca următoarele.
['App \ Listeners \ SendEmailNotification'],],]; / ** * Înregistrați orice evenimente pentru aplicația dvs. * * @return void * / boot funcțional public () parent :: boot (); //
Illuminate \ Auth \ Evenimente \ Autentificare
este un eveniment care va fi ridicat de către Auth
plugin atunci când cineva se conectează la o aplicație. Am legat acel eveniment la App \ Ascultătorii \ SendEmailNotification
ascultător, deci va fi declanșat la evenimentul de conectare.
Desigur, trebuie să definiți App \ Ascultătorii \ SendEmailNotification
ascultător clasa în primul rând. Ca întotdeauna, Laravel vă permite să creați un cod de șablon al unui ascultător folosind comanda artizanului.
php artisan eveniment: genera
Această comandă generează clase de evenimente și ascultători enumerate în secțiunea $ asculta
proprietate.
În cazul nostru, Illuminate \ Auth \ Evenimente \ Autentificare
eveniment există deja, așa că creează doar App \ Ascultătorii \ SendEmailNotification
clasa de ascultători. De fapt, ar fi creat Illuminate \ Auth \ Evenimente \ Autentificare
eveniment clasa prea dacă nu există în primul rând.
Să aruncăm o privire la clasa de ascultători creată la app / Ascultătorii / SendEmailNotification.php
.
Este vorba de
mâner
metoda care va fi invocată cu dependențe adecvate ori de câte ori ascultătorul este declanșat. În cazul nostru,$ eveniment
argumentul ar trebui să conțină informații contextuale despre informațiile de conectare înregistrate de eveniment logat.Și putem folosi
$ eveniment
obiecte pentru a efectua o prelucrare ulterioară înmâner
metodă. În cazul nostru, dorim să trimitem notificarea prin e-mail către utilizatorul conectat.Revizuit
mâner
metoda poate arata cam ca:funcția publică funcțională (login $ event) // intra în e-mail și numele utilizatorului $ email = $ event-> user-> email; $ username = $ event-> user-> name; // trimiteți o notificare prin e-mail despre conectareDeci așa ar trebui să folosești funcția de evenimente din Laravel. Din următoarea secțiune, vom continua și vom crea un eveniment personalizat și o clasă de ascultători asociată.
Creați un eveniment personalizat
Scenariul de exemplu pe care îl vom folosi pentru exemplul nostru este ceva de genul:
CacheClear
eveniment împreună cu informațiile contextuale când o aplicație face acest lucru. Vom trece cheile grupului de cache împreună cu un eveniment care a fost eliminat.CacheClear
eveniment și ar dori să pună în aplicare codul care încălzește cache-uri conexe.Să revedem app / Furnizori / EventServiceProvider.php
fișier și înregistrați evenimentul personalizat și mapările ascultătorilor.
['App \ Listeners \ WarmUpCache',];]; / ** * Înregistrați orice evenimente pentru aplicația dvs. * * @return void * / boot funcțional public () parent :: boot (); //
După cum puteți vedea, am definit App \ Evenimente \ ClearCache
eveniment și clasa ascultătorilor asociate App \ Ascultătorii \ WarmUpCache
sub $ asculta
proprietate.
Apoi, trebuie să creăm fișiere de clasă asociate. Rețineți că puteți folosi întotdeauna comanda artizanului pentru a genera un cod de șablon de bază.
php artisan eveniment: genera
Asta ar fi trebuit să creeze clasa evenimentului la app / Evenimente / ClearCache.php
și clasa ascultătorilor la app / Ascultătorii / WarmUpCache.php
.
Cu câteva modificări, app / Evenimente / ClearCache.php
clasa ar trebui să arate astfel:
cache_keys = $ cache_keys; / ** * Obțineți canalele la care ar trebui să difuzeze evenimentul. * * @return Channel | array * / funcția publică broadcastOn () returnează noul PrivateChannel ('channel-name');
Așa cum probabil ați observat, am adăugat o nouă proprietate $ cache_keys
care va fi folosit pentru a ține informațiile care vor fi transmise împreună cu un eveniment. În cazul nostru, vom trece grupuri de cache care au fost spălate.
Apoi, să aruncăm o privire la clasa ascultătorilor cu o actualizare mâner
la app / Ascultătorii / WarmUpCache.php
.
cache_keys) && count ($ event-> cache_keys)) foreach ($ event-> cache_keys ca $ cache_key) // generați memoria cache pentru această cheie // cal_up_cache ($ cache_key)
Atunci când ascultătorul este invocat, mâner
metoda este trecută cu instanța evenimentului asociat. În cazul nostru, ar trebui să fie instanța ClearCache
eveniment care va fi trecut ca primul argument pentru mâner
metodă.
Apoi, este doar o chestiune de iterare prin fiecare cheie de memorie cache și încălzirea cache-urilor asociate.
Acum, avem totul pentru a testa lucrurile impotriva. Să creăm rapid un fișier de controler la app / HTTP / Controllers / EventController.php
pentru a demonstra cum poți face un eveniment.
În primul rând, am trecut o serie de chei cache ca primul argument în timp ce creăm o instanță a
ClearCache
eveniment.Funcția de ajutor al evenimentului este utilizată pentru a ridica un eveniment din orice punct al unei aplicații. Când evenimentul este ridicat, Laravel îi cheamă pe toți ascultătorii să asculte evenimentul respectiv.
În cazul nostru,
App \ Ascultătorii \ WarmUpCache
ascultător este setat să asculteApp \ Evenimente \ ClearCache
eveniment. Astfel,mâner
metodă aApp \ Ascultătorii \ WarmUpCache
ascultător este invocat atunci când evenimentul este ridicat de la un controler. Restul este de a încălzi cache-urile care au fost șterse!Deci, astfel puteți crea evenimente personalizate în aplicația dvs. și puteți lucra cu ele.
Ce este un abonat al evenimentului??
Abonatul la eveniment vă permite să vă abonați la mai multe ascultători de evenimente într-un singur loc. Indiferent dacă doriți să grupați în mod logic ascultătorii de evenimente sau doriți să conțină evenimente în creștere într-un singur loc, este abonatul evenimentului pe care îl căutați.
Dacă am fi implementat exemplele discutate până acum în acest articol utilizând abonatul evenimentului, ar putea arăta astfel.
user-> e-mail; $ username = $ event-> user-> name; // trimiteți o notificare prin e-mail despre conectare ... / ** * Efectuați evenimente de logout pentru utilizator. * / funcția publică warmUpCache ($ event) if (isset ($ event-> cache_keys) && count ($ event-> cache_keys)) foreach ($ event-> cache_keys ca $ cache_key) // generați cache pentru această cheie // warm_up_cache ($ cache_key) / ** * Înregistrați ascultătorii pentru abonat. * * @param Iluminare \ Evenimente \ Dispatcher $ evenimente * / public subscribe function ($ evenimente) $ evenimente-> asculta ('Iluminare \ Auth \ Events \ Login', 'App \ Listeners \ ExampleEventSubscriber @ sendEmailNotification'); $ evenimente-> asculta ('App \ Events \ ClearCache', 'App \ Listeners \ ExampleEventSubscriber @ warmUpCache');Este vorba de
Abonati-va
metodă care este responsabilă pentru înregistrarea ascultătorilor. Primul argument alAbonati-va
metoda este instanțaIlluminate \ Evenimente \ Dispecerat
clasa pe care ați putea folosi pentru a lega evenimentele cu ascultătorii folosindasculta
metodă.Primul argument al
asculta
metoda este un eveniment pe care doriți să-l ascultați, iar al doilea argument este un ascultător care va fi sunat când evenimentul este ridicat.În acest fel, puteți defini mai multe evenimente și ascultători în clasa abonatului în sine.
Clasa abonatului la eveniment nu va fi preluată automat. Trebuie să vă înregistrați în
EventServiceProvider.php
clasa sub$ abonat
proprietate, așa cum se arată în fragmentul următor.Așa că a fost clasa de abonați la eveniment la dispoziția dvs. și cu asta am ajuns și la sfârșitul acestui articol.
Concluzie
Astăzi am discutat câteva din trăsăturile interesante ale evenimentelor Laravel și ale ascultătorilor. Ele se bazează pe modelul de design al observatorului care vă permite să ridicați evenimentele la nivelul aplicațiilor și să permiteți altor module să asculte acele evenimente și să reacționeze în consecință.
Obțineți viteza la Laravel sau căutați să vă extindeți cunoștințele, site-ul sau aplicația cu extensii? Avem o varietate de lucruri pe care le puteți studia în piața Envato.
!