Symfony2: перенаправить пользователя на страницу индекса, если страница не найдена или 404 ошибки выброшены
Я хочу перенаправить пользователя на определенную страницу. Когда страница не найдена, в symfony2 появляется ошибка.
Для настройки сообщения об ошибке я создал
app\Resources\TwigBundle\views\Exception\error404.html.twing
Но теперь я хочу перенаправить пользователя на определенную страницу. Как я могу это сделать?
Спасибо
2 ответа
Вы хотите создать прослушиватель событий, который прослушивает kernel.exception
событие, которое ядро отправляет, когда оно встречает исключение.
Затем вы должны проверить внутри слушателя, является ли исключение экземпляром NotFoundHttpException
и, если это так, перенаправьте на страницу по вашему выбору.
Вот пример:
<?php
// src/Acme/DemoBundle/EventListener/AcmeExceptionListener.php
namespace Acme\DemoBundle\EventListener;
use Symfony\Component\HttpKernel\Event\GetResponseForExceptionEvent;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
class AcmeExceptionListener
{
public function onKernelException(GetResponseForExceptionEvent $event)
{
// You get the exception object from the received event
$exception = $event->getException();
if ($event->getException() instanceof NotFoundHttpException) {
$response = new RedirectResponse($url);
$event->setResponse($response);
}
}
}
Очевидно, вам нужно зарегистрировать прослушиватель событий. Это просто услуга, поэтому вам просто нужно зарегистрировать ее как обычно.
# app/config/config.yml
services:
kernel.listener.your_listener_name:
class: Acme\DemoBundle\EventListener\AcmeExceptionListener
tags:
- { name: kernel.event_listener, event: kernel.exception, method: onKernelException }
Вы должны использовать.htaccess для этого. Пожалуйста, посмотрите это.