Symfony2:当找不到页面或抛出404错误时,将用户重定向到索引页面

时间:2014-04-22 10:28:15

标签: php symfony symfony-2.4

我想将用户重定向到特定页面当找不到页面时,错误会出现在symfony2中。

用于自定义我创建的错误页面消息

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

但现在我想将用户重定向到特定页面。我怎么能这样做?

由于

2 个答案:

答案 0 :(得分:2)

您可能希望创建一个event listener来侦听内核在遇到异常时调度的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 }

答案 1 :(得分:0)

你必须使用.htaccess。请参阅this