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 !
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 ?
-
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.
-
Flexibilité : Vous pouvez facilement ajouter de nouvelles réactions aux événements sans modifier le code existant.
-
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