Symfony2 - 使用路由作为异常页面

时间:2013-04-14 16:19:57

标签: symfony

我已经看了很多方法来做到这一点,但无法找到解决方案。

我希望我的网站在发生异常时显示特定的路线/页面。

所以,如果我将其设置为显示路线'contact'并且我转到domain.com/dfergerxyttt(找不到路由)那么它就像我去了domain.com/route一样(除了404状态代码)。

我需要这些关键的东西: (1)我需要像往常一样运行控制器代码 (2)我还需要它来运行我的Request事件监听器代码

我不能只设置它来显示一个特定的模板,它必须是整个请求 - 事件 - 监听器和控制器等过程。

我尝试了一个异常监听器,但它也不会运行请求监听器。所有代码都被忽略了。

我无法找到一种方法来设置一个包罗万象的路线或任何东西。设置默认路径或全能路线是一个好主意。

-

我试过这个,但我无法访问控制器。不知道我是否需要注入它或其他东西:

namespace etc...

use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Bundle\TwigBundle\Controller\ExceptionController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpKernel\HttpKernel;
use Symfony\Component\HttpKernel\Exception\FlattenException;
use Symfony\Component\HttpKernel\Log\DebugLoggerInterface;
use Symfony\Component\HttpFoundation\Response;

class MyExceptionController extends ExceptionController
{
    public function showAction(Request $request, FlattenException $exception, DebugLoggerInterface $logger = null, $format = 'html')
    {

       $httpKernel = $this->container->get('kernel');
       $response = $httpKernel->forward('AcmeMyBundle:Default:pageAction');
       $this->setResponse(new Response($response));

    }
}

我也在services.yml中做过这个,看起来似乎是正确的:

parameters:
    twig.controller.exception
      class: Acme\MyBundle\MyExceptionController

1 个答案:

答案 0 :(得分:0)

创建一个异常控制器并使用Controller::forward转发到特定路由。

请参阅此答案,了解如何在2.2中创建例外控制器:https://stackoverflow.com/a/15773923/1149495