Effectuer une action en fonction de l'URL sur Symfony2 via l'event kernel.request

dans Symfony2

Utiliser l'event kernel.request de Symfony2, analyser la route et rediriger si la route n'est pas du type "app_admin_..." par exemple. L'inconvénient de cette méthode est qu'elle est appelée à chaque request.

Créer la classe

use Symfony\Component\HttpKernel\Event\GetResponseEvent;
use Symfony\Component\HttpKernel\HttpKernel;
use Symfony\Component\HttpFoundation\RedirectResponse;

class TestRequestListener
{

    private $security;
    private $router;
    private $request_stack;

    public function __construct($security, $router, $request_stack)
    {

        $this->security = $security;
        $this->router = $router;
        $this->request_stack = $request_stack;

    }

    public function onKernelRequest(GetResponseEvent $event)
    {

        //__ n'agir que si c'est la requête principale
        if (HttpKernel::MASTER_REQUEST == $event->getRequestType()) {

            $request = $this->request_stack->getCurrentRequest();
            $routeName = $request->get('_route');

            //__ On fait l'action en fonction de l'URL...
            if( strpos($routeName, 'app_admin_') === false && $this->security->isGranted('ROLE_ADMIN') ) {

                //__ Action à effectuer...

            }

        }

    }
}

Créer le service

Dans le fichier config.yml :

kernel.listener.your_listener_name:
    class: App\TestBundle\Listener\TestRequestListener
    arguments: [ @security.context, @router, @request_stack ]
    tags:
        - { name: kernel.event_listener, event: kernel.request, method: onKernelRequest }
Posté il y a par keepcodeclear.
Uncaught Exception

Uncaught Exception

Module 'mysqli' already loaded

Origin

on line 0

Trace

#0 [internal function]: System\Error::shutdown()
#1 {main}