FabRiviere / Livre_Or_Symfony

Développement du projet concernant un livre d'or sur les conférences. Projet du livre Symfony 6.
0 stars 0 forks source link

Implémentation d'un subscriber (événement Symfony) pour accéder à une variable de façon globale dans Twig. #20

Closed FabRiviere closed 1 year ago

FabRiviere commented 1 year ago

Un subscriber est un listener avec une méthode statique getSubscribedEvents() qui retourne sa configuration. Ceci permet aux subscribers d'être enregistrés automatiquement dans le dispatcher Symfony. Nous allons donc créer ce subscriber pour avoir accès à la variable "conferences" de manière globale dans Twig. (Plutôt que devoir mettre le repository à chaque fois en arguments des fonctions de contrôleurs.)

FabRiviere commented 1 year ago

Générer un subscriber avec le maker bundle :

symfony console make:subscriber TwigEventSubscriber

Répondre à la question sur le choix de l'événement à écouter : Pour notre cas, nous voulons que l'écoute se fasse juste avant l'appel d'un contrôleur. Nous devons donc écouter Symfony\Component\HttpKernel\ControllerEvent, ou donner la réponse simplifiée :

kernel.controller

Modification et mis à jour du subscriber (TwigEventSubscriber.php) :

class TwigEventSubscriber implements EventSubscriberInterface
{
    private $twig;
    private $conferenceRepository;

    public function __construct(Environment $twig, ConferenceRepository $conferenceRepository)
    {
        $this->twig = $twig;
        $this->conferenceRepository = $conferenceRepository;
    }

    public function onKernelController(ControllerEvent $event): void
    {
        $this->twig->addGlobal('conferences', $this->conferenceRepository->findAll());
    }

    public static function getSubscribedEvents(): array
    {
        return [
            KernelEvents::CONTROLLER => 'onKernelController',
        ];
    }
}