Aangepaste evenementen in Laravel

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

Basisprincipes van evenementen en luisteraars

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 de handvat 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 login

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

  • Een toepassing moet op bepaalde punten caches in een systeem wissen. We zullen de CacheClear gebeurtenis samen met de contextuele informatie wanneer een toepassing het bovengenoemde doet. We geven cachegroepsleutels door, samen met een gebeurtenis die is gewist.
  • Andere modules in een systeem luisteren mogelijk naar de 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 luisteren App \ Events \ ClearCache evenement. Dus, de handvat methode van de App \ 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 de abonneren methode is de instantie van de Verlichten \ Events \ Dispatcher klasse die u kunt gebruiken om gebeurtenissen met luisteraars te binden met behulp van de luister 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.

!