Laravel - Gestion des événements

Bonjour à tous, futurs magiciens Laravel ! Aujourd'hui, nous plongeons dans le monde magique de la gestion des événements dans Laravel. Ne vous inquiétez pas si vous êtes nouveaux dans la programmation - je vais vous guider à travers ce périple étape par étape, tout comme j'ai fait pour des centaines d'étudiants au fil des ans. Alors, prenez une tasse de votre boisson favorite et embarquons ensemble dans cette aventure passionnante !

Laravel - Event Handling

Qu'est-ce que les événements dans Laravel ?

Imaginez que vous êtes à une fête (une fête de code, bien sûr !). Quand quelque chose d'important se passe - comme quand le gâteau arrive - tout le monde est excité. Dans Laravel, les événements sont comme ces moments exaltants dans votre application. Ce sont des occurrences spéciales qui intéressent votre application.

Par exemple, quand un utilisateur s'inscrit sur votre site web, c'est un événement. Quand une commande est passée, c'est un autre événement. Les événements nous aident à maintenir notre code organisé et permettent à différentes parties de notre application de réagir à ces moments importants.

Pourquoi utiliser des événements ?

  1. Dé耦合 : Les événements aident à séparer différentes parties de votre application. C'est comme avoir différentes équipes au travail - chaque équipe n'a pas besoin de tout savoir sur ce que font les autres.

  2. Flexibilité : Vous pouvez facilement ajouter de nouvelles réactions aux événements sans modifier le code existant.

  3. Clarté : Les événements rendent votre code plus facile à comprendre. Il est clair ce qui se passe et quand.

Créer votre premier événement

Créons ensemble notre premier événement. Nous allons créer un événement qui se produit lorsqu'un nouvel utilisateur s'inscrit. Voici comment on fait :

php artisan make:event NewUserRegistered

Cette commande crée un nouveau fichier dans app/Events appelé NewUserRegistered.php. Jetons un coup d'œil à l'intérieur :

<?php

namespace App\Events;

use Illuminate\Broadcasting\Channel;
use Illuminate\Broadcasting\InteractsWithSockets;
use Illuminate\Broadcasting\PresenceChannel;
use Illuminate\Broadcasting\PrivateChannel;
use Illuminate\Contracts\Broadcasting\ShouldBroadcast;
use Illuminate\Foundation\Events\Dispatchable;
use Illuminate\Queue\SerializesModels;

class NewUserRegistered
{
use Dispatchable, InteractsWithSockets, SerializesModels;

public $user;

public function __construct($user)
{
$this->user = $user;
}

public function broadcastOn()
{
return new PrivateChannel('channel-name');
}
}

Ne laissez pas tout ce code vous effrayer ! C'est comme une recette - nous allons passer chaque ingrédient en revue :

  • Les déclarations use en haut sont comme des outils que nous pourrions avoir besoin.
  • Notre classe d'événement NewUserRegistered est où se passe la magie.
  • La propriété $user va contenir des informations sur le nouvel utilisateur.
  • La méthode __construct est appelée lorsque nous créons cet événement, et elle stocke les informations utilisateur.

Déclencher (Lancer) un événement

Maintenant que nous avons notre événement, utilisons-le ! Nous allons déclencher cet événement lorsqu'un nouvel utilisateur s'inscrit. Voici comment nous pourrions le faire dans un contrôleur :

use App\Events\NewUserRegistered;

public function register(Request $request)
{
// ... logique d'inscription de l'utilisateur ...

$user = User::create($request->all());

event(new NewUserRegistered($user));

return redirect('/welcome');
}

Ici, après avoir créé un nouvel utilisateur, nous déclenchons notre événement en utilisant la fonction event(). C'est comme lancer des feux d'artifice pour célébrer le nouvel utilisateur !

Écouter les événements

Maintenant, créons un écouteur qui réagira à notre événement. Pensez à cette personne à la fête qui est en charge de distribuer les chapeaux de fête lorsque le gâteau arrive.

Premièrement, créons un écouteur :

php artisan make:listener SendWelcomeEmail --event=NewUserRegistered

Cela crée un nouveau fichier dans app/Listeners appelé SendWelcomeEmail.php. Jetons un coup d'œil à l'intérieur :

<?php

namespace App\Listeners;

use App\Events\NewUserRegistered;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Queue\InteractsWithQueue;

class SendWelcomeEmail
{
public function handle(NewUserRegistered $event)
{
// Accéder à l'utilisateur via $event->user
// Logique d'envoi d'un email de bienvenue ici
}
}

La méthode handle est où nous mettons le code qui doit s'exécuter lorsque l'événement se produit. Dans ce cas, nous mettrions notre logique d'envoi d'un email de bienvenue.

Enregistrer les écouteurs d'événements

Pour connecter notre événement à notre écouteur, nous devons les enregistrer. Ouvrez app/Providers/EventServiceProvider.php et ajoutez ceci au tableau $listen :

protected $listen = [
NewUserRegistered::class => [
SendWelcomeEmail::class,
],
];

Cela dit à Laravel, "Hey, lorsque NewUserRegistered se produit, exécute SendWelcomeEmail !"

Abonnés aux événements

Parfois, vous pourriez vouloir qu'une seule classe gère plusieurs événements. C'est là que les abonnés aux événements entrent en jeu. Ils sont comme le planificateur de la fête qui est en charge de multiples aspects de la fête.

Voici comment créer un abonné aux événements :

php artisan make:listener UserEventSubscriber

Ensuite, dans la classe UserEventSubscriber :

<?php

namespace App\Listeners;

class UserEventSubscriber
{
public function handleUserRegistered($event) {}

public function handleUserLoggedIn($event) {}

public function subscribe($events)
{
$events->listen(
'App\Events\NewUserRegistered',
'App\Listeners\UserEventSubscriber@handleUserRegistered'
);

$events->listen(
'App\Events\UserLoggedIn',
'App\Listeners\UserEventSubscriber@handleUserLoggedIn'
);
}
}

Pour enregistrer cet abonné, ajoutez-le à la propriété $subscribe dans EventServiceProvider :

protected $subscribe = [
'App\Listeners\UserEventSubscriber',
];

Écouteurs d'événements enfileés

Si votre écouteur d'événement effectue une tâche chronophage (comme envoyer un email), vous pourriez vouloir le mettre en file d'attente pour ne pas ralentir votre application. C'est comme dire à quelqu'un, "Hey, peux-tu faire cette tâche plus tard quand tu ne seras pas si occupé ?"

Pour rendre un écouteur enfileable, implémentez l'interface ShouldQueue :

use Illuminate\Contracts\Queue\ShouldQueue;

class SendWelcomeEmail implements ShouldQueue
{
// ...
}

Maintenant, Laravel mettra automatiquement cet écouteur en file d'attente !

Table des méthodes des événements

Voici un tableau pratique des principales méthodes que nous utilisons avec les événements :

Méthode Description
event() Déclenche un événement
listen() Enregistre un écouteur d'événement
subscribe() Enregistre un abonné aux événements
dispatch() Une autre manière de déclencher un événement
broadcast() Diffuse un événement (pour les applications en temps réel)

Et voilà, mes chers étudiants ! Nous avons parcouru ensemble le territoire de la gestion des événements dans Laravel. Souvenez-vous, la pratique rend parfait, alors n'ayez pas peur d'expérimenter avec ces concepts dans vos propres projets. Qui sait ? Vous pourriez même organiser la meilleure fête de code jamais vue avec vos nouvelles compétences en gestion des événements !

Bonne programmation, et puissent vos événements toujours être traités avec grâce et style !

Credits: Image by storyset