PROD環境でのみカスタムエラーページを設定できますか?私は、プロダクションのためにカスタムのものを表示したいが、dev環境の例外を持つ通常のものを表示したい。PROD環境のカスタムエラーページのみ?
アイデア?
PROD環境でのみカスタムエラーページを設定できますか?私は、プロダクションのためにカスタムのものを表示したいが、dev環境の例外を持つ通常のものを表示したい。PROD環境のカスタムエラーページのみ?
アイデア?
私は同じ問題を抱えていて、解決策はかなり簡単でした。独自のコントローラにエラーページのレンダリングをリダイレクトするには、パラメータtwig.exception_listener.contoller
を変更する必要があります。オリジナルのTwig例外コントローラを拡張する可能性があります。
例(YourBundle/Resources/config/services.xml
):
<parameter key="twig.exception_listener.controller">YourBundle\Controller\ExceptionController::showAction</parameter>
は、その後、あなたは、メソッドshowAction
を使用して独自のExceptionControllerを作成し、環境をチェックし、あなたがparent::showAction()
に要求を行うか、渡したいものをしなければなりません。
namespace YourBundle\Controller;
use Symfony\Bundle\TwigBundle\Controller\ExceptionController as BaseExceptionController;
use Symfony\Bundle\FrameworkBundle\Templating\TemplateReference;
use Symfony\Component\HttpKernel\Exception\FlattenException;
use Symfony\Component\HttpKernel\Log\DebugLoggerInterface;
use Symfony\Component\HttpFoundation\Response;
class ExceptionController extends BaseExceptionController {
public function showAction(FlattenException $exception, DebugLoggerInterface $logger = null, $format = 'html') {
$kernel = $this->container->get('kernel');
if ($kernel->getEnvironment() == 'prod') {
$request = $this->container->get('request');
$request->setRequestFormat($format);
$templating = $this->container->get('templating');
$code = $exception->getStatusCode();
$template = new TemplateReference('YourBundle', 'Exception', 'errorpage', $format, 'twig');
if ($templating->exists($template)) {
$response = $templating->renderResponse($template, array(
'status_code' => $code,
'message_code' => 'error_' . $code,
'status_text' => Response::$statusTexts[$code],
'requested_url' => $request->getUri(),
));
$response->setStatusCode($code);
$response->headers->replace($exception->getHeaders());
return $response;
}
}
return parent::showAction($exception, $logger, $format);
}
}
twig処理の例外は通常通り処理されないため、errorpage.html.twigのエラーには注意してください。
あなたは例外コントローラを上書きしたくない場合は、次の
あなたが最初に続いて
\app\Resources\TwigBundle\views
に
\vendor\symfony\symfony\src\Symfony\Bundle\TwigBundle\Resources\views\
でフォルダ全体(または特定のレイアウトファイル)をコピーすることができます各レイアウトファイルのビューをデザインに合わせてカスタマイズします。あなたはクックブックintで必要なもの
{% if app.environment == 'prod' %}
// message for prod
{% else %}
// message for dev
{% endif %}
に従うよう
が続いてレイアウトファイルで、(DEV例外ページはまだ同じで、それが唯一のPROD環境に影響を与えます)の各環境メッセージをカスタマイズします。http:/ /symfony.com/doc/current/cookbook/controller/error_pages.html – AlterPHP