Événements personnalisés à Laravel

Dans cet article, nous allons explorer les bases de la gestion d'événements à Laravel. C'est l'une des fonctionnalités importantes que vous, en tant que développeur, devriez avoir dans votre arsenal dans le cadre souhaité. A mesure que nous avançons, nous saisirons également cette opportunité pour créer un exemple concret d'événement et d'auditeur personnalisés. C'est également l'objectif ultime de cet article..

Le concept d'événements à Laravel est basé sur un modèle de conception de logiciel très populaire, le modèle d'observateur. Dans ce modèle, le système est supposé déclencher des événements lorsque quelque chose se passe, et vous pouvez définir des écouteurs qui écoutent ces événements et réagissent en conséquence. C'est une fonctionnalité très utile qui vous permet de découpler des composants d'un système qui, autrement, aurait abouti à un code étroitement couplé.

Par exemple, supposons que vous souhaitiez notifier tous les modules d'un système lorsqu'une personne se connecte à votre site. Ainsi, cela leur permet de réagir à cet événement de connexion, qu’il s’agisse d’envoyer un courrier électronique ou une notification intégrée à l’application ou, par ailleurs, tout ce qui veut réagir à cet événement de connexion..

Notions de base sur les événements et les auditeurs

Dans cette section, nous allons explorer la manière dont Laravel met en œuvre des événements et des écouteurs dans le cadre principal. Si vous connaissez l'architecture de Laravel, vous savez probablement que Laravel implémente le concept de fournisseur de services qui vous permet d'injecter différents services dans une application..

De même, Laravel fournit une fonction intégrée EventServiceProvider.php classe qui nous permet de définir des mappages d'écouteurs d'événements pour une application.

Allez-y et tirez dans la app / Providers / EventServiceProvider.php fichier.

 ['App \ Listeners \ EventListener',],]; / ** * Enregistrez des événements pour votre application. * * @return void * / fonction publique boot () parent :: boot (); //

Regardons de près le $ écouter propriété, qui vous permet de définir un tableau d’événements et des écouteurs associés. Les clés de tableau correspondent aux événements d'un système et leurs valeurs aux écouteurs qui seront déclenchés lorsque l'événement correspondant est déclenché dans un système..

Je préfère passer par un exemple concret pour le démontrer davantage. Comme vous le savez probablement, Laravel fournit un système d’authentification intégré qui facilite des fonctionnalités telles que la connexion, l’enregistrement, etc..

Supposons que vous souhaitiez envoyer la notification par courrier électronique, par mesure de sécurité, lorsque quelqu'un se connecte à l'application. Si Laravel n'a pas pris en charge la fonctionnalité d'écouteur d'événements, vous avez peut-être fini par éditer la classe principale ou par un autre moyen de brancher votre code qui envoie un courrier électronique..

En fait, vous êtes du côté des plus chanceux, car Laravel vous aide à résoudre ce problème en utilisant l'écouteur d'événements. Révisons le app / Providers / EventServiceProvider.php fichier à ressembler à ce qui suit.

 ['App \ Listeners \ SendEmailNotification',],]; / ** * Enregistrez des événements pour votre application. * * @return void * / fonction publique boot () parent :: boot (); //

Illuminer \ Auth \ Événements \ Connexion est un événement qui sera soulevé par le Auth plugin quand quelqu'un se connecte à une application. Nous avons lié cet événement à la App \ Listeners \ SendEmailNotification écouteur, donc ça va être déclenché sur l'événement de connexion.

Bien sûr, vous devez définir le App \ Listeners \ SendEmailNotification classe d'auditeur en premier lieu. Comme toujours, Laravel vous permet de créer un modèle de code d’un auditeur à l’aide de la commande artisan..

Evénement artisanal php: générer

Cette commande génère des classes d’événement et d’écoute listées sous le nom $ écouter propriété.

Dans notre cas, le Illuminer \ Auth \ Événements \ Connexion événement existe déjà, donc il ne crée que le App \ Listeners \ SendEmailNotification classe d'auditeur. En fait, cela aurait créé la Illuminer \ Auth \ Événements \ Connexion classe d'événement aussi si elle n'existait pas en premier lieu.

Regardons la classe d'écoute créée à app / Auditeurs / SendEmailNotification.php.

C'est le manipuler méthode qui sera appelée avec les dépendances appropriées chaque fois que le programme d'écoute est déclenché. Dans notre cas, le $ événement l'argument doit contenir des informations contextuelles sur les informations de l'utilisateur connecté à l'événement connecté.

Et nous pouvons utiliser le $ événement objet d'effectuer d'autres traitements dans le manipuler méthode. Dans notre cas, nous voulons envoyer la notification par courrier électronique à l'utilisateur connecté..

Le révisé manipuler méthode peut ressembler à quelque chose comme:

fonction publique descripteur (Login $ event) // obtenir l'adresse email et le nom d'utilisateur de l'utilisateur connecté $ email = $ event-> user-> email; $ username = $ event-> user-> name; // envoyer une notification par courrier électronique à propos de la connexion

C'est ainsi que vous êtes censé utiliser les événements de Laravel. A partir de la section suivante, nous allons créer un événement personnalisé et une classe d'écoute associée..

Créer un événement personnalisé

L'exemple de scénario que nous allons utiliser pour notre exemple ressemble à ceci:

  • Une application doit vider les caches d'un système à certains moments. Nous allons soulever la CacheClear événement avec les informations contextuelles quand une application fait ce qui précède. Nous allons passer les clés du groupe de cache avec un événement qui a été effacé.
  • Les autres modules d’un système peuvent écouter les CacheClear événement et souhaite implémenter un code qui réchauffe les caches associés.

Revisitons le app / Providers / EventServiceProvider.php archiver et enregistrer nos mappages d'événements et d'auditeurs personnalisés.

 ['App \ Listeners \ WarmUpCache',],]; / ** * Enregistrez des événements pour votre application. * * @return void * / fonction publique boot () parent :: boot (); //

Comme vous pouvez le voir, nous avons défini le App \ Events \ ClearCache événement et classe d'écoute associée App \ Listeners \ WarmUpCache sous le $ écouter propriété.

Ensuite, nous devons créer des fichiers de classe associés. Rappelez-vous que vous pouvez toujours utiliser la commande artisan pour générer un code de modèle de base..

Evénement artisanal php: générer

Cela aurait dû créer la classe d'événement à app / Events / ClearCache.php et la classe d'auditeur à app / Auditeurs / WarmUpCache.php.

Avec quelques changements, le app / Events / ClearCache.php la classe devrait ressembler à ceci:

cache_keys = $ cache_keys;  / ** * Récupère les chaînes sur lesquelles l’événement doit être diffusé. * * @return Channel | array * / public function broadcastOn () return new PrivateChannel ('nom de la chaîne'); 

Comme vous l'avez probablement remarqué, nous avons ajouté une nouvelle propriété $ cache_keys qui sera utilisé pour stocker des informations qui seront transmises avec un événement. Dans notre cas, nous allons passer les groupes de cache qui ont été vidés..

Ensuite, regardons la classe d’auditeur avec une mise à jour manipuler méthode à app / Auditeurs / WarmUpCache.php.

cache_keys) && count ($ event-> cache_keys)) foreach ($ event-> cache_keys as $ cache_key) // génère un cache pour cette clé // warm_up_cache ($ cache_key)

Lorsque l’auditeur est appelé, le manipuler La méthode est passée avec l'instance de l'événement associé. Dans notre cas, cela devrait être le cas du Vider le cache événement qui sera passé comme premier argument à la manipuler méthode.

Ensuite, il suffit de parcourir chaque clé de cache et de réchauffer les caches associés..

Maintenant, nous avons tout mis en place pour tester les choses. Créons rapidement un fichier de contrôleur à app / Http / Controllers / EventController.php pour démontrer comment vous pouvez organiser un événement.

Tout d'abord, nous avons passé un tableau de clés de cache comme premier argument lors de la création d'une instance de Vider le cache un événement.

La fonction d'assistance aux événements est utilisée pour déclencher un événement à partir de n'importe où dans une application. Lorsque l'événement est déclenché, Laravel appelle tous les auditeurs qui écoutent cet événement.

Dans notre cas, le App \ Listeners \ WarmUpCache auditeur est réglé pour écouter la App \ Events \ ClearCache un événement. Ainsi, le manipuler méthode du App \ Listeners \ WarmUpCache L’écouteur est appelé lorsque l’événement est déclenché par un contrôleur. Le reste consiste à réchauffer les caches qui ont été effacées!

Vous pouvez ainsi créer des événements personnalisés dans votre application et les utiliser..

Qu'est-ce qu'un abonné à un événement??

L'abonné aux événements vous permet de souscrire plusieurs écouteurs d'événements en un seul endroit. Que vous souhaitiez grouper logiquement des écouteurs d'événement ou que vous vouliez contenir des événements en croissance dans un seul endroit, c'est l'abonné d'événement que vous recherchez..

Si nous avions implémenté les exemples discutés jusqu'à présent dans cet article en utilisant l'abonné d'événement, cela pourrait ressembler à ceci.

utilisateur-> email; $ username = $ event-> user-> name; // envoie une notification par courrier électronique à propos de la connexion… / ** * Gestion des événements de déconnexion utilisateur. * / fonction publique warmUpCache ($ event) if (isset ($ event-> cache_keys) && count ($ event-> cache_keys)) foreach ($ event-> cache_keys as $ cache_key) // génère un cache pour cette clé // warm_up_cache ($ cache_key) / ** * Enregistrez les écouteurs pour l'abonné. * * @param Illuminate \ Events \ Dispatcher $ events * / fonction publique subscribe ($ events) $ events-> listen ('Illuminate \ Auth \ Events \ Login', 'App \ Listeners \ ExampleEventSubscriber @ sendEmailNotification'); $ events-> listen ('App \ Events \ ClearCache', 'App \ Listeners \ ExampleEventSubscriber @ warmUpCache'); 

C'est le souscrire méthode qui est responsable de l'enregistrement des auditeurs. Le premier argument de la souscrire méthode est l'instance de la Illuminer \ Événements \ Répartiteur classe que vous pouvez utiliser pour lier des événements à des auditeurs à l'aide du écoute méthode.

Le premier argument de la écoute méthode est un événement que vous souhaitez écouter, et le deuxième argument est un écouteur qui sera appelé lorsque l'événement sera déclenché.

De cette manière, vous pouvez définir plusieurs événements et écouteurs dans la classe d’abonné elle-même..

La classe d'abonné aux événements ne sera pas prise automatiquement. Vous devez l'enregistrer dans le EventServiceProvider.php classe sous la $ abonné propriété, comme indiqué dans l'extrait suivant.

C’était donc la classe d’abonnés aux événements à votre disposition, et nous avons également atteint la fin de cet article..

Conclusion

Nous avons discuté aujourd’hui de quelques-unes des caractéristiques intéressantes des événements et des auditeurs de Laravel. Ils sont basés sur le modèle de conception de l'observateur qui vous permet de créer des événements à l'échelle de l'application et aux autres modules de les écouter et de réagir en conséquence..

Vous souhaitez simplement vous familiariser avec Laravel ou chercher à étendre vos connaissances, votre site ou votre application avec des extensions? Nous avons une variété de choses que vous pouvez étudier sur le marché Envato.

!