In dit artikel gaan we de basis van event management in Laravel verkennen. Het is een van de belangrijke functies die u als ontwikkelaar in uw arsenaal in uw gewenste kader zou moeten hebben. Naarmate we verdergaan, grijpen we ook deze kans aan om een echt voorbeeld van een aangepast evenement en luisteraar te creëren, en dat is ook het uiteindelijke doel van dit artikel.
Het concept van evenementen in Laravel is gebaseerd op een zeer populair softwareontwerppatroon - het waarnemerspatroon. In dit patroon wordt verondersteld dat het systeem gebeurtenissen oproept wanneer er iets gebeurt, en kunt u luisteraars definiëren die naar deze gebeurtenissen luisteren en dienovereenkomstig reageren. Het is echt een handige functie op een manier waarmee u componenten in een systeem kunt ontkoppelen die anders tot sterk gekoppelde code zouden hebben geleid.
Stel dat u bijvoorbeeld alle modules in een systeem wilt laten weten wanneer iemand inlogt op uw site. Zo kunnen ze reageren op deze inloggebeurtenis, of het nu gaat om het verzenden van een e-mail of in-app melding of om wat dan ook dat op deze login-gebeurtenis wil reageren..
In deze sectie zullen we Laravel's manier van implementeren van evenementen en luisteraars in het kernraamwerk verkennen. Als u bekend bent met de architectuur van Laravel, weet u waarschijnlijk dat Laravel het concept van een serviceprovider implementeert waarmee u verschillende services in een applicatie kunt injecteren.
Op dezelfde manier biedt Laravel een ingebouwde EventServiceProvider.php
klasse waarmee we event listener-toewijzingen voor een toepassing kunnen definiëren.
Ga je gang en trek de app / Providers / EventServiceProvider.php
het dossier.
['App \ Listeners \ EventListener',],]; / ** * Registreer evenementen voor uw toepassing. * * @return void * / public function boot () parent :: boot (); //
Laten we de $ luisteren
eigenschap, waarmee u een reeks gebeurtenissen en bijbehorende luisteraars kunt definiëren. De array-toetsen komen overeen met gebeurtenissen in een systeem en hun waarden komen overeen met luisteraars die worden geactiveerd wanneer de overeenkomstige gebeurtenis in een systeem wordt verhoogd.
Ik geef er de voorkeur aan om een realistisch voorbeeld te doorlopen om het verder te demonstreren. Zoals u waarschijnlijk weet, biedt Laravel een ingebouwd authenticatiesysteem dat functies zoals inloggen, registreren en dergelijke vergemakkelijkt.
Stel dat u de e-mailmelding als beveiligingsmaatregel wilt verzenden wanneer iemand zich aanmeldt bij de toepassing. Als Laravel de functie gebeurtenislistener niet heeft ondersteund, hebt u mogelijk de kernklasse bewerkt of een andere manier om uw code in te voegen die een e-mail verzendt.
Sterker nog, je hebt de gelukkiger kant als Laravel je helpt om dit probleem op te lossen met behulp van de gebeurtenislistener. Laten we het herzien app / Providers / EventServiceProvider.php
bestand om er als volgt uit te zien.
['App \ Listeners \ SendEmailNotification',],]; / ** * Registreer evenementen voor uw toepassing. * * @return void * / public function boot () parent :: boot (); //
Verlichten \ Auth \ Events \ Inloggen
is een evenement dat wordt gehouden door de Auth
plugin wanneer iemand inlogt op een applicatie. We hebben die gebeurtenis gekoppeld aan de App \ Luisteraars \ SendEmailNotification
luisteraar, dus het wordt geactiveerd bij de login-gebeurtenis.
Natuurlijk moet u de App \ Luisteraars \ SendEmailNotification
luisteraarklasse in de eerste plaats. Zoals altijd kunt u met Laravel een sjablooncode van een luisteraar maken met behulp van de artisan-opdracht.
php artisan event: genereren
Deze opdracht genereert event- en listenerklassen die worden vermeld onder de $ luisteren
eigendom.
In ons geval is de Verlichten \ Auth \ Events \ Inloggen
evenement bestaat al, dus het maakt alleen het App \ Luisteraars \ SendEmailNotification
luisteraar klasse. In feite zou het de Verlichten \ Auth \ Events \ Inloggen
evenementklasse ook als deze niet in de eerste plaats bestond.
Laten we eens kijken naar de listenerklasse gemaakt op app / Luisteraars / SendEmailNotification.php
.
Het is de
handvat
methode die wordt aangeroepen met de juiste afhankelijkheden telkens wanneer de luisteraar wordt geactiveerd. In ons geval is de$ event
argument moet contextuele informatie bevatten over de login-ingelogde gebruikersinformatie.En we kunnen de gebruiken
$ event
object om verdere verwerking uit te voeren in dehandvat
methode. In ons geval willen we de e-mailmelding naar de ingelogde gebruiker sturen.De herziene
handvat
methode kan er ongeveer zo uitzien:openbare functiehandgreep (Login $ -gebeurtenis) // wordt aangemeld in de e-mail en gebruikersnaam van de gebruiker $ email = $ event-> gebruiker-> e-mail; $ username = $ event-> user-> name; // stuur e-mail melding over loginDus dat is hoe je de evenementenfunctie in Laravel zou moeten gebruiken. Vanaf het volgende gedeelte gaan we door en maken we een aangepaste gebeurtenis en bijbehorende listenerklasse.
Maak een aangepast evenement
Het voorbeeldscenario dat we voor ons voorbeeld gaan gebruiken, is zoiets als dit:
CacheClear
gebeurtenis samen met de contextuele informatie wanneer een toepassing het bovengenoemde doet. We geven cachegroepsleutels door, samen met een gebeurtenis die is gewist.CacheClear
evenement en wil graag code implementeren die verwante caches opwarmt.Laten we de. Opnieuw bezoeken app / Providers / EventServiceProvider.php
bestand en registreer onze aangepaste gebeurtenis en listener toewijzingen.
['App \ Listeners \ WarmUpCache',],]; / ** * Registreer evenementen voor uw toepassing. * * @return void * / public function boot () parent :: boot (); //
Zoals u kunt zien, hebben we de App \ Events \ ClearCache
event en bijbehorende listenerklasse App \ Luisteraars \ WarmUpCache
onder de $ luisteren
eigendom.
Vervolgens moeten we bijbehorende klassenbestanden maken. Bedenk dat u altijd de artisan-opdracht kunt gebruiken om een basissjablooncode te genereren.
php artisan event: genereren
Dat had de evenementklasse moeten maken app / Events / ClearCache.php
en de luisteraarklasse op app / Luisteraars / WarmUpCache.php
.
Met een paar wijzigingen, de app / Events / ClearCache.php
klasse zou er als volgt uit moeten zien:
cache_keys = $ cache_keys; / ** * Download de kanalen waarop het evenement moet uitzenden. * * @return Channel | array * / public function broadcastOn () return new PrivateChannel ('channel-name');
Zoals u waarschijnlijk heeft opgemerkt, hebben we een nieuwe property toegevoegd $ cache_keys
die zal worden gebruikt om informatie vast te houden die samen met een evenement wordt doorgegeven. In ons geval geven we cachegroepen door die zijn leeggemaakt.
Laten we vervolgens de listenerklasse bekijken met een bijgewerkte versie handvat
methode bij app / Luisteraars / WarmUpCache.php
.
cache_keys) && count ($ event-> cache_keys)) foreach ($ event-> cache_keys als $ cache_key) // genereer cache voor deze sleutel // warm_up_cache ($ cache_key)
Wanneer de luisteraar wordt aangeroepen, de handvat
methode wordt doorgegeven met de instantie van de bijbehorende gebeurtenis. In ons geval zou het de instantie moeten zijn van de Cache wissen
gebeurtenis die zal worden doorgegeven als het eerste argument voor de handvat
methode.
Vervolgens is het gewoon een kwestie van het doorlopen van elke cachesleutel en het opwarmen van bijbehorende caches.
Nu hebben we alles op alles om zaken tegen te testen. Laten we snel een controllerbestand maken op app / Http / Controllers / EventController.php
om aan te tonen hoe je een evenement kunt organiseren.
Ten eerste hebben we een reeks cachetoetsen als het eerste argument doorgegeven tijdens het maken van een instantie van de
Cache wissen
evenement.De event-helperfunctie wordt gebruikt om een gebeurtenis vanaf elke locatie in een toepassing op te roepen. Wanneer het evenement plaatsvindt, roept Laravel alle luisteraars op die naar dat specifieke evenement luisteren.
In ons geval is de
App \ Luisteraars \ WarmUpCache
luisteraar is ingesteld om naar te luisterenApp \ Events \ ClearCache
evenement. Dus, dehandvat
methode van deApp \ Luisteraars \ WarmUpCache
luisteraar wordt aangeroepen wanneer het evenement wordt opgeheven vanaf een controller. De rest is om caches op te warmen die zijn gewist!Op die manier kunt u aangepaste gebeurtenissen in uw toepassing maken en ermee werken.
Wat is een evenement-abonnee?
Met de abonnee van de gebeurtenis kunt u meerdere gebeurtenislisteners op één enkele plaats abonneren. Of u logische gebeurtenislisteners logisch wilt groeperen of als u groeiende evenementen op één plaats wilt bevatten, het is de evenementabonnee waarnaar u op zoek bent.
Als we de voorbeelden die tot nu toe in dit artikel zijn besproken, met de abonnee van de gebeurtenis hebben geïmplementeerd, kan deze er zo uitzien.
gebruiksvriendelijke> e-mail; $ username = $ event-> user-> name; // stuur een e-mailmelding over inloggen ... / ** * behandel gebruikersuitloggebeurtenissen. * / openbare functie warmUpCache ($ event) if (isset ($ event-> cache_keys) && count ($ event-> cache_keys)) foreach ($ event-> cache_keys als $ cache_key) // genereer cache voor deze sleutel // warm_up_cache ($ cache_key) / ** * Registreer de luisteraars voor de abonnee. * * @param Illuminate \ Events \ Dispatcher $ events * / publieke functie subscribe ($ events) $ events-> listen ('Illuminate \ Auth \ Events \ Login', 'App \ Listeners \ ExampleEventSubscriber @ sendEmailNotification'); $ events-> listen ('App \ Events \ ClearCache', 'App \ Listeners \ ExampleEventSubscriber @ warmUpCache');Het is de
abonneren
methode die verantwoordelijk is voor het registreren van luisteraars. Het eerste argument van deabonneren
methode is de instantie van deVerlichten \ Events \ Dispatcher
klasse die u kunt gebruiken om gebeurtenissen met luisteraars te binden met behulp van deluister
methode.Het eerste argument van de
luister
methode is een gebeurtenis waarnaar u wilt luisteren en het tweede argument is een luisteraar die wordt gebeld wanneer het evenement wordt opgehaald.Op deze manier kunt u meerdere evenementen en luisteraars in de abonneeklasse zelf definiëren.
De evenementabonneeklasse wordt niet automatisch opgehaald. U moet het registreren in de
EventServiceProvider.php
klasse onder de$ abonnee
eigenschap, zoals weergegeven in het volgende fragment.Dus dat was de evenementabonneeklasse tot uw beschikking, en daarmee zijn we ook aan het einde van dit artikel gekomen.
Conclusie
Vandaag hebben we een paar van de opwindende functies van Laravel-evenementen en luisteraars besproken. Ze zijn gebaseerd op het ontwerppatroon van de waarnemer waarmee u toepassingsbrede gebeurtenissen kunt verhogen en andere modules kunt toestaan om naar die gebeurtenissen te luisteren en dienovereenkomstig te reageren.
Ben je net aan de slag in Laravel of wil je je kennis, site of applicatie uitbreiden met uitbreidingen? We hebben een verscheidenheid aan dingen die je in Envato Market kunt studeren.
!