Try   HackMD

Symfony - Exercices - Kernel events

tags: Symfony gobelins

Exercice 1

Quels sont les différents évènements gérés par le kernel symfony ?

Kernel symfony events doc
Kernel symfony events dispatcher doc

Exercice 2

Créer une nouvelle classe qui implémente l'interface Symfony\Component\EventDispatcher\EventSubscriberInterface afin de rediriger automatiquement l'utilisateur qui se trouve sur l'url A vers B.

<?php

// src/EventSubscriber/KernelEventSubscriber.php
namespace App\EventSubscriber;

use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpKernel\Event\RequestEvent;
use Symfony\Component\HttpKernel\KernelEvents;

class KernelEventSubscriber implements EventSubscriberInterface
{
    public static function getSubscribedEvents()
    {
        // return the subscribed events, their methods and priorities
        return [
            KernelEvents::REQUEST => 'onKernelRequest',
            KernelEvents::VIEW => 'onKernelView'
        ];
    }

    public function onKernelRequest()
    {
       if('index' !== $this->getRouteName($event->getRequest())) {
           return;
       }

       $url = $this->router->generate('hop');

       $event->setResponse(new RedirectResponse($url));
    }

    public function onKernelView()
    {
       if('hop' !== $this->getRouteName($event->getRequest())) {
           return;
       }

       $url = $this->router->generate('hop');
    }
}

Exercice 3

Intégrer le code source ci-dessous, comment est-il possible d'obtenir une "Response" fonctionnelle sans modifier le code du controller ?

<?php

declare(strict_types=1);

namespace App\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Routing\Annotation\Route;

/**
 * Class HelloController.
 *
 * @author Jérôme Fath
 *
 * @Route("/hello", name="hello_")
 */
final class HelloController extends AbstractController
{
    /**
     * @Route("/", name="index")
     */
    public function index()
    {
        return 'WTF';
    }
}