Événements du workflow Symfony : réagir à un changement de statut

Les événements du workflow Symfony annoncent chaque étape d'une transition : on réagit à un changement de statut, venu d'une page ou d'une commande.

final class ParcheminsDuRegistre
{
    public function __construct(private readonly Parcheminier $parcheminier)
    {
    }

    // workflow.reservation.entered.confirmee : l'arrivée à « confirmee », quelle que soit la transition.
    #[AsEnteredListener(workflow: 'reservation', place: 'confirmee')]
    public function confirmee(EnteredEvent $event): void
    {
        $this->parcheminier->envoyerLaConfirmation($event->getSubject());
    }
}

À chaque transition, le workflow émet dans l'ordre guard, leave, transition, enter, entered, completed, puis announce pour chaque transition devenue possible. Chacun se décline en trois portées, workflow.entered, workflow.reservation.entered et workflow.reservation.entered.confirmee, la dernière visant une place ou une transition ; #[AsEnteredListener], #[AsLeaveListener] ou #[AsCompletedListener] composent ce nom. L'effet vit alors avec le workflow, pas dans un contrôleur. Le piège : placer un effet dans un écouteur de guard, appelé à chaque can() et à chaque affichage des boutons, ou dans enter, émis avant que la nouvelle marque soit écrite sur l'objet, là où entered arrive une fois la place atteinte. debug:event-dispatcher workflow.reservation.entered.confirmee liste qui écoute vraiment.

Les exercices font partir le parchemin de confirmation quand une réservation arrive à confirmee, et un parchemin d'annulation quand elle arrive à annulee, le formulaire n'envoyant plus rien ; puis, dans un registre « simplifié », retrouver pourquoi une annulation envoie deux parchemins contradictoires, ou le mauvais.

2 exercices font travailler cette notion, en écrivant du code dans le navigateur.

Dans les parcours

Notions voisines

MailerDébogageWorkflowGardes