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 для этого. Пожалуйста, посмотрите это.

Другие вопросы по тегам