Qu’est-ce qu’un événement
Le système d’événements de Laravel implémente le pattern observateur. Vous déclenchez des « événements » représentant des faits survenus dans l’application, et des listeners y réagissent, ce qui minimise les dépendances entre composants. Par exemple, un événement « commande validée » peut déclencher indépendamment « envoyer l’e-mail de confirmation », « décrémenter le stock » et « notifier Slack ». Le code de la commande ignore complètement l’implémentation de l’envoi de mails ou de Slack.Les classes d’événement vont dans
app/Events, les listeners dans app/Listeners.
Ces dossiers sont créés automatiquement par les commandes Artisan.Générer événements et listeners
Utilisezmake:event et make:listener.
Enregistrement des listeners
Auto-discovery
Par défaut, Laravel scanneapp/Listeners et enregistre les listeners.
La classe/méthode handle ou __invoke est inspectée : le type de son argument détermine l’événement écouté.
bootstrap/app.php.
Enregistrement manuel
ViaEvent dans AppServiceProvider::boot.
Définir un événement
Une classe d’événement n’est qu’un conteneur de données. Elle porte les informations liées à l’événement, sans logique.SerializesModels garantit une bonne sérialisation des modèles Eloquent quand le listener est en file.
Déclencher un événement
Utilisez la méthode statiquedispatch ou le helper event().
Après la commit d’une transaction
Pour ne dispatcher qu’après commit d’une transaction, implémentezShouldDispatchAfterCommit. En cas de rollback, l’événement est ignoré.
Implémenter un listener
La méthodehandle reçoit l’événement.
Le constructeur peut recevoir des dépendances via le conteneur.
false depuis handle interrompt la propagation aux listeners suivants.
Listeners en file (queued)
Pour les traitements longs (mail, HTTP…), exécutez le listener en asynchrone. ImplémentezShouldQueue : Laravel enfile automatiquement le listener lors du dispatch.
Nécessite la configuration de la queue et le démarrage d’un worker. Voir Queues et jobs.
Personnaliser connexion, queue et délai
Utilisez les attributs PHP.Nombre max d’essais et timeout
Gestion des échecs
La méthodefailed est appelée après épuisement des tentatives.
Souscripteurs d’événements
Un souscripteur regroupe plusieurs handlers dans une même classe.Créer un souscripteur
subscribe renvoie la table événement → handler.
Enregistrement
Avec l’auto-discovery, les souscripteurs retournant un tableau sont enregistrés automatiquement. Sinon, dansAppServiceProvider::boot, appelez Event::subscribe.
Exemple : e-mail de bienvenue à l’inscription
1
Créer l'événement
2
Créer le listener
ShouldQueue pour un envoi asynchrone.3
Dispatcher l'événement depuis le contrôleur
Après la création de l’utilisateur.
RegisterController ignore l’implémentation de l’envoi de mail.
Ajouter plus tard un « notifier Slack » ne modifie pas le contrôleur.4
Démarrer un worker
Pour traiter les listeners en file.