La cloche de la taverne

Exercice 2 sur 6 du chapitre 9 · 270 XP · 5 objectifs vérifiés par des tests

Notions abordées : Événement métierEventDispatcherInterfacedispatchPriorité des écouteurs

Quand Bruna invente un plat, toute la taverne doit le savoir. Pipin a déjà écrit de quoi inviter les guildes à le goûter (InviterLesGuildes), et Gorm exige d'être prévenu en premier. Mais le contrôleur de la cuisine ne prévient personne.

On pourrait tout écrire dans le contrôleur : envoyer le corbeau à Gorm, boucler sur les guildes… puis y ajouter demain la mise à jour de l'ardoise, après-demain une statistique. Le contrôleur deviendrait le carrefour de toute la taverne.

Un événement métier

L'autre voie : le contrôleur annonce ce qui s'est passé (« un plat a été ajouté »), et ceux que ça intéresse écoutent. L'événement PlatAjoute existe déjà : une simple classe qui transporte le plat et le cuisinier. Ajouter une réaction, c'est ajouter un écouteur, sans toucher au contrôleur.

Votre mission

  1. Dans CuisineController::nouveauPlat(), déclenchez PlatAjoute une fois le plat enregistré, et seulement dans ce cas.
  2. Complétez PrevenirLeTavernier : à chaque PlatAjoute, un corbeau part pour Gorm, avec le nom du plat et celui du cuisinier.
  3. Gorm doit être prévenu avant les guildes.

Pour essayer : connectez-vous avec bruna@dragon-ivre.fr / marmite, inventez un plat, puis ouvrez /voliere. Dans la console, debug:event-dispatcher "App\Event\PlatAjoute" liste les écouteurs de l'événement, dans l'ordre.