I am building an administration panel for a website and I would like to change the view called when a 404 exception occurs but only for the admin application. <
For some reason, this worked:
// get exception
$exception = $event->getException();
// get path
$path = $event->getRequest()->getPathInfo();
if ($exception->getStatusCode() == 404 && strpos($path, '/admin') === 0){
$templating = $this->container->get('templating');
$response = new Response($templating->render('CmtAdminBundle:Exception:error404.html.twig', array(
'exception' => $exception
)));
$event->setResponse($response);
}
Which is basically what I was doing earlier with a different syntax...
@dmirkitanov Anyway, thanks for your help !
You could try this one:
public function __construct(TwigEngine $templating)
{
$this->templating = $templating;
}
public function onKernelException(GetResponseForExceptionEvent $event)
{
static $handling;
$exception = $event->getException();
if (true === $handling) {
return;
}
$handling = true;
$code = $exception->getCode();
if (0 !== strpos($event->getRequest()->getPathInfo(), '/admin') && 404 === $code) {
$message = $this->templating->render('AcmeBundle:Default:error404new.html.twig', array());
$response = new Response($message, $code);
$event->setResponse($response);
}
$handling = false;
}
$templating variable can be passed in services.xml:
<service id="acme.exception.listener" class="%acme.exception.listener.class%">
<tag name="kernel.event_listener" event="kernel.exception" method="onKernelException" />
<argument type="service" id="templating" />
</service>