自定义403错误页面depening上路线的symfony 2.0(customize 403 er

2019-07-18 03:30发布

我想自定义的Symfony 2.0的错误页面

我知道,这是通过在覆盖的布局完成app/Resources/TwigBundle/views/Exception/* ,但我希望有不同的路线不同的错误页面。

我想一个是后端和一个前端。

我怎样才能做到这一点?

Answer 1:

什么你需要做的是不是太困难。 Symfony的可以让你明确指定哪个控制器处理你的例外。 所以,在你config.yml,你可以指定在你的树枝配置异常控制器:

因为Symfony的2.2

twig:
   exception_controller:  my.twig.controller.exception:showAction

services:
    my.twig.controller.exception:
        class: AcmeDemoBundle\Controller\ExceptionController
        arguments: [@twig, %kernel.debug%]

高达2.1的Symfony:

twig:
  exception_controller: AcmeDemoBundle\Controller\ExceptionController::showAction

然后,您可以创建显示基于路线上的自定义错误页自定义的showAction:

<?php
namespace AcmeDemoBundle\Controller;

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

class ExceptionController extends BaseExceptionController
{
    public function showAction(FlattenException $exception, DebugLoggerInterface $logger = null, $format = 'html')
    {
        if ($this->container->get('request')->get('_route') == "abcRoute") {
            $appTemplate = "backend";
        } else { 
            $appTemplate = "frontend";
        }

        $template = $this->container->get('kernel')->isDebug() ? 'exception' : 'error';
        $code = $exception->getStatusCode();

        return $this->container->get('templating')->renderResponse(
            'AcmeDemoBundle:Exception:' . $appTemplate . '_' . $template . '.html.twig',
            array(
                'status_code'    => $code,
                'status_text'    => Response::$statusTexts[$code],
                'exception'      => $exception,
                'logger'         => null,
                'currentContent' => '',
            )
        );
    }
}

显然,你应该定义在if语句,在此检测当前的路线,以满足您的需求,但是这应该这样做。

你可能想补充一点,默认为正常的枝条错误页面,如果你没有创建一个特定的错误模板代码。 欲了解更多信息,请查看代码

Symfony\Bundle\TwigBundle\Controller\ExceptionController

以及

Symfony\Component\HttpKernel\EventListener\ExceptionListener


Answer 2:

我使用arguments: ["@twig", "%kernel.debug%"]代替arguments: [@twig, %kernel.debug%]



文章来源: customize 403 error page depening on route in symfony 2.0