2012-02-27 14 views
2

PROD環境でのみカスタムエラーページを設定できますか?私は、プロダクションのためにカスタムのものを表示したいが、dev環境の例外を持つ通常のものを表示したい。PROD環境のカスタムエラーページのみ?

アイデア?

+1

に従うよう

が続いてレイアウトファイルで、(DEV例外ページはまだ同じで、それが唯一のPROD環境に影響を与えます)の各環境メッセージをカスタマイズします。http:/ /symfony.com/doc/current/cookbook/controller/error_pages.html – AlterPHP

答えて

6

私は同じ問題を抱えていて、解決策はかなり簡単でした。独自のコントローラにエラーページのレンダリングをリダイレクトするには、パラメータ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のエラーには注意してください。

0

あなたは例外コントローラを上書きしたくない場合は、次の

あなたが最初に続いて

\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 %} 
関連する問題