Les évènements vont permettre de mieux découper la logique de fonctionnement de l'application en émettant des évènements lorsque certaines opérations sont faites. Il sera ensuite possible d'écouter lorsque ces évènements seront émis pour ajouter de la logique par dessus.
Évènements
La génération d'évènement peut se faire à l'aide de la commande artisan :
php artisan make:event LoginEvent
Cet évènement va se construire comme un objet classique et on pourra préciser les éléments nécessaire à sa construction. Ensuite, lorsqu'on le souhaite on peut émettre cet évènement à l'aide de la méthode dispatch()
ou via la méthode globale event()
event(new LoginEvent($user));
Écouteurs
Maintenant que nos évènements sont émis il faut pouvoir écouter leur déclenchement pour ajouter de la logique par dessus. Pour cela, il est possible d'utiliser 2 types de classes : Les listeners et les subscribers.
Les écouteurs sont associés à un évènement.
php artisan make:listener SendLoginNotification --event=LoginEvent
Il faudra aussi modifier le EventServiceProvider
pour associer l'écouteur à l'évènement concerné à l'aide de la propriété protégées $listen
.
protected $listen = [
LoginEvent::class => [
SendLoginNotification::class,
],
];
Subscriber
Les "subscribers" vont pouvoir définir la liste des évènements qu'ils écoutent et peuvent aussi contenir les actions à effectuer (pas nécessairement).
<?php
namespace App\Listeners;
use Illuminate\Auth\Events\Login;
use Illuminate\Auth\Events\Logout;
use Illuminate\Events\Dispatcher;
class UserEventSubscriber
{
public function handleUserLogin(string $event): void {}
public function handleUserLogout(string $event): void {}
public function subscribe(Dispatcher $events): array
{
return [
Login::class => 'handleUserLogin',
Logout::class => 'handleUserLogout',
];
}
}
Ensuite on modifiera le EventServiceProvider
pour ajouter notre subscriber.
protected $subscribe = [
UserEventSubscriber::class,
];