Fermé le lundi

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

Notions abordées : Événements du noyaukernel.request#[AsEventListener]RequestEventClockInterface

Le lundi, Bruna fait les marchés et Gorm compte les tonneaux : la taverne est fermée. Jusqu'ici, Pipin accrochait un écriteau sur la porte, mais le site, lui, continue d'accepter les réservations. Il faut une règle qui s'applique à toutes les pages de la salle, sans toucher à chaque contrôleur.

Les événements du noyau

Pour chaque requête, Symfony annonce les étapes de son travail sous forme d'événements : kernel.request (la requête arrive), kernel.controller, kernel.response, kernel.exception… N'importe quel service peut les écouter. C'est comme ça que fonctionnent le routeur, le pare-feu et le profiler.

Et quand un écouteur de kernel.request fournit lui-même une réponse, Symfony n'appelle pas le contrôleur.

Votre mission

Complétez l'écouteur FermeLeLundi :

  1. le lundi, les pages de la salle (les routes de SALLE) répondent 503 avec la page fermeture.html.twig ;
  2. les autres jours, rien ne change ;
  3. les cuisines, l'API des guildes et la connexion restent ouvertes ;
  4. une page inconnue reste une 404.

Lisez l'heure avec l'horloge reçue dans le constructeur, pas avec new \DateTimeImmutable() : c'est ce qui permet aux tests de choisir le jour. En développement, Pipin a même arrêté l'horloge un lundi midi (config/packages/horloge.yaml) : l'aperçu doit afficher la fermeture.