我想自定義錯誤頁的Symfony 2.0自定義403錯誤頁面depening的路線symfony的2.0
我知道,這是通過在app/Resources/TwigBundle/views/Exception/*
覆蓋佈局做,但我希望有不同的路線不同的錯誤頁面。
我想要一個用於後端,另一個用於前端。
我該如何做到這一點?
我想自定義錯誤頁的Symfony 2.0自定義403錯誤頁面depening的路線symfony的2.0
我知道,這是通過在app/Resources/TwigBundle/views/Exception/*
覆蓋佈局做,但我希望有不同的路線不同的錯誤頁面。
我想要一個用於後端,另一個用於前端。
我該如何做到這一點?
你需要做的不是太難。 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' => '',
)
);
}
}
Ob很明顯你應該自定義if語句來測試當前的路線以適應你的需求,但是這應該做到這一點。
如果您沒有創建特定的錯誤模板,您可能需要添加默認爲普通Twig錯誤頁面的代碼。欲瞭解更多信息,請查看代碼
Symfony\Bundle\TwigBundle\Controller\ExceptionController
以及
Symfony\Component\HttpKernel\EventListener\ExceptionListener
我使用 arguments: ["@twig", "%kernel.debug%"]
而不是 arguments: [@twig, %kernel.debug%]
謝謝你的答覆。像一個迷人的工作。 –