Symfony2: перенаправить пользователя на индексную страницу, если страница не найдена или выдается ошибка 404

Я хочу перенаправить пользователя на определенную страницу. Когда страница не найдена, появляется ошибка symfony2.

Для настройки сообщения страницы ошибки я создал

app\Resources\TwigBundle\views\Exception\error404.html.twing

Но теперь я хочу перенаправить пользователя на определенную страницу. Как я могу это сделать?

Спасибо


person Napster    schedule 22.04.2014    source источник
comment
Здесь вы найдете свою радость -› stackoverflow.com/questions/15983082/   -  person Healkiss    schedule 22.04.2014


Ответы (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 }
person Léo Lam    schedule 22.04.2014
comment
Спасибо. Поскольку я новичок в Symfony, как мне его зарегистрировать? - person Napster; 23.04.2014
comment
Я добавил пример в свой ответ. Не забывайте, что документация иногда может быть очень полезной! (Приведенные мной примеры в основном совпадают с примерами из документации.) - person Léo Lam; 23.04.2014

Для этого вы должны использовать .htaccess. См. это.

person train_fox    schedule 22.04.2014
comment
Нет. Это для Symfony2, а не для обычных ошибок 404 от Apache. И ОП может не использовать Apache. - person Léo Lam; 22.04.2014