Skip to main content

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

Utilisez make:event et make:listener.
Sans arguments, la commande est interactive.

Enregistrement des listeners

Auto-discovery

Par défaut, Laravel scanne app/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é.
Un type union PHP permet de gérer plusieurs événements dans la même méthode.
Pour des listeners hors de ce dossier, ajoutez des chemins de scan dans bootstrap/app.php.
Wildcards autorisés :
Liste des listeners enregistrés :
En production, mettez le manifest en cache : php artisan optimize ou php artisan event:cache. Videz-le avec php artisan event:clear.

Enregistrement manuel

Via Event dans AppServiceProvider::boot.
Ou via closure.

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.
Le trait 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 statique dispatch ou le helper event().
Il existe aussi les variantes conditionnelles.

Après la commit d’une transaction

Pour ne dispatcher qu’après commit d’une transaction, implémentez ShouldDispatchAfterCommit. En cas de rollback, l’événement est ignoré.

Implémenter un listener

La méthode handle reçoit l’événement. Le constructeur peut recevoir des dépendances via le conteneur.
Retourner 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émentez ShouldQueue : 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.
Ou via des méthodes dynamiques.

Nombre max d’essais et timeout

Gestion des échecs

La méthode failed 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, dans AppServiceProvider::boot, appelez Event::subscribe.

Exemple : e-mail de bienvenue à l’inscription

1

Créer l'événement

Ajoutez une propriété pour l’utilisateur.
2

Créer le listener

Implémentez 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.
Avec l’auto-discovery, aucun enregistrement manuel n’est requis dans AppServiceProvider.
Vérifiez régulièrement php artisan event:list pour détecter d’éventuels listeners inattendus.
Dernière modification le 13 juillet 2026