Я создаю административную панель для веб-сайта и хочу изменить вид, вызываемый при возникновении исключения 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 }