Evenimente personalizate în Laravel

Î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.

Elementele de bază ale evenimentelor și ale ascultătorilor

Î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ă în mâ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 conectare

Deci 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:

  • O aplicație trebuie să elimine cache-urile într-un sistem în anumite puncte. Vom ridica 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.
  • Alte module dintr-un sistem pot asculta 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ă asculte App \ Evenimente \ ClearCache eveniment. Astfel, mâner metodă a App \ 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 al Abonati-va metoda este instanța Illuminate \ Evenimente \ Dispecerat clasa pe care ați putea folosi pentru a lega evenimentele cu ascultătorii folosind asculta 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.

!

Cod