Symfony2 - Manipuler demande/réponse de la part du Noyau Exception Auditeur

Je suis en construction d'un panneau d'administration pour un site web et je voudrais changer la vue appelée lorsqu'une erreur 404 exception se produit mais seulement pour l'application de l'administrateur. (path: /admin/*)

J'ai déjà abusé du error404.html.twig vue (à app/Resources/TwigBundle/views/Exception/) pour le site web.

J'ai pensé que le noyau.exception écouteur d'événement, mais maintenant je suis coincé avec deux choses:

  • Chargement d'une autre erreur vue que lorsque la route commence par le préfixe: /admin/

    $route = $event->getRequest->get('_route')->render()
    //returns NULL
  • L'appel de la $event->container->get('templating')->render() fonction.

Je me retrouve avec une boucle infinie (page vierge) que le script échoue.

Les seules choses que j'ai obtenu de travail sont:

  • Récupérer le code d'exception:

    $exception = $event->getException();
    $code = $exception->getCode();
  • La création d'une nouvelle réponse:

    $response = new Response();
    $event->setResponse($response);

Des suggestions sur la façon pour y parvenir?

[MODIFIER]

La classe:

namespace Cmt\AdminBundle\EventListener;

use Symfony\Component\DependencyInjection\ContainerInterface;
use Symfony\Bundle\TwigBundle\TwigEngine;

class AdminActionListener
{
    /**
     * @var ContainerInterface
     */
    protected $container;

    /**
     * @var TwigEngine
     */
    protected $templating;


    /**
     * @param ContainerInterface $container
     */
    public function __construct(ContainerInterface $container, TwigEngine $templating){
        //assign value(s)
        $this->container = $container;
        $this->templating = $templating;
    }

    /**
     * 
     * @param GetResponseForExceptionEvent $event
     */
    public function onKernelException(GetResponseForExceptionEvent $event)
    {
        //get exception
        $exception = $event->getException();

        //get path
        $path = $event->getRequest()->getPathInfo();

        /*
        * Redirect response to new 404 error view only
        * on path prefix /admin/
            */
        }
}

Et les services.yml:

services:
    cmt_admin.exception.action_listener:
        class: Cmt\AdminBundle\EventListener\AdminActionListener
        arguments: [@service_container] [@templating]
        tags:
            -   { name: kernel.event_listener, event: kernel.exception, method: onKernelException }

OriginalL'auteur LBridge | 2011-09-19