Symfony2 - Управление запросом / ответом от прослушивателя исключений ядра

Я создаю административную панель для веб-сайта и хочу изменить вид, вызываемый при возникновении исключения 404 , но только для приложение администратора. (путь: / admin / *)

Я уже переборщил с представлением error404.html.twig app / Resources / TwigBundle / views / Exception / ) для сайта.

Я подумал о прослушивателе событий kernel.exception, но теперь я застрял в двух вещах:

  • Загрузка другого окна просмотра ошибок только тогда, когда маршрут начинается с префикса: / admin /

     $ route = $ event-> getRequest-> get ('_ route') -> render () 
     // возвращает NULL 
     
  • Вызов $ event-> container-> get ('templating ') -> функция render () .

Я получаю бесконечный цикл (пустая страница) из-за сбоя сценария.

Единственное, что у меня есть, это:

  • Получение кода исключения:

     $ exception = $ event-> getException (); 
     $ code = $ exception-> getCode () ; 
     
  • Создание нового ответа:

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

Любые предложения о том, как этого добиться?

[РЕДАКТИРОВАТЬ]

Класс:

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/ 
            */
        }
}

И 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 }
8
задан Habeeb Perwad 20 November 2012 в 05:19
поделиться