Gorm tient le registre des réservations sur un vieux cahier plein de ratures. Pipin lui a préparé une page, /cuisine/registre, qui liste les réservations et propose un bouton pour chaque transition possible. Il ne reste qu'à faire fonctionner ces boutons, et à poser deux règles de la maison :
- seul Gorm, le patron, annule une réservation ;
- on n'honore une réservation qu'à partir du jour du repas.
Les gardes
Une garde empêche une transition dans certaines conditions. Elle s'écrit de deux façons :
- une expression dans la configuration (
guard: "is_granted('ROLE_PATRON')"), pour les règles simples ; - un écouteur de garde (
#[AsGuardListener]), pour les règles qui demandent du code. Il peut expliquer son refus avec unTransitionBlocker.
Les gardes s'appliquent partout : can(), apply(), et même dans Twig. Le registre n'affiche que les boutons permis.
Votre mission
- Faites fonctionner les boutons du registre : un jeton CSRF valide, la transition si elle est possible, un message, puis retour au registre.
- Seul le patron peut annuler.
- On n'honore pas une réservation avant son jour, et le registre explique pourquoi (« Le repas n'a pas encore eu lieu »).
- Une transition impossible, ou qui n'existe pas, est expliquée dans un message d'erreur, sans erreur 500.
Pour essayer : connectez-vous avec bruna@dragon-ivre.fr / marmite (cuisinière), puis avec gorm@dragon-ivre.fr / tonneau (patron), et ouvrez le Registre.