Aller au contenu principal

Événements et Listeners

Utiliser les événements pour les changements de domaine significatifs et les réactions cross-module.

Quand utiliser les événements

À faire :

  • Émettre un événement après un changement de rôle utilisateur
  • Émettre un événement après la fin d'un import
  • Émettre un événement quand une alerte doit être créée depuis un autre module
  • Utiliser des listeners en file d'attente pour les effets de bord lents

À ne pas faire :

  • Utiliser les événements pour masquer la logique métier synchrone centrale
  • Utiliser les événements pour des appels simples contrôleur → service
  • Mettre l'autorisation dans les listeners sauf si c'est le point d'entrée

Convention de nommage

TypeExemple
Événement domaine au passéUserPermissionUpdated
Processus terminéImportParsingCompleted
Alerte demandéeAlertCreationRequested

Règle de payload

Les payloads doivent contenir des IDs de modèle ou de petits DTOs immutables. Ne pas passer de grands tableaux mutables.

Exemple

// Événement
class ImportParsingCompleted
{
public function __construct(
public readonly int $importId,
public readonly string $module,
public readonly int $rowCount,
) {}
}

// Dispatching
event(new ImportParsingCompleted($import->id, 'analyses', $rowCount));

// Listener
class SendImportNotification implements ShouldQueue
{
public function handle(ImportParsingCompleted $event): void
{
// notification asynchrone
}
}