13

いくつかのバンドルがあり、バンドルごとに独自のエラー ページをカスタマイズできるかどうかを知りたいです。

クックブックを読んだところ、例にはすべてのバンドルの一般的なカスタマイズ ページしか表示されませんでした。

各バンドルの例外プロセスをオーバーライドする方法はありますか?

4

2 に答える 2

5

リスナー自体がそれを検出する必要があります-単一のバンドルにリスナーを指定する方法は知りません。

<?

namespace Your\MainBundle\EventListener;
use Symfony\Component\HttpKernel\Event\GetResponseForExceptionEvent;

class YourExceptionListener
{
  public function onKernelException(GetResponseForExceptionEvent $event)
  {
    $exception = $event->getException();
    $namespace = new \ReflectionObject( $event->getController() )->getNamespaceName();

    switch ( $namespace )
    {
      case 'Acme\\DemoBundle':
        // do whatever with $exception here
        break;
      case 'Some\\OtherBundle':
        // do whatever with $exception here
        break;
      case 'Your\\MainBundle':
        // do whatever with $exception here
        break;
      default;
        // default
    }
  }
}

そしてそれを登録する

//services.yml
kernel.listener.yourlistener:
  class: Your\MainBundle\YourExceptionListener
  tags:
    - { name: kernel.event_listener, event: kernel.exception, method: onKernelException }
于 2012-06-20T17:32:21.797 に答える
-1

ルートの正規表現構成からさまざまなエラー ページをキャッチするために作成したバンドルがあります。これは、ドキュメント ( http://symfony.com/doc/ current/cookbook/controller/error_pages.html#use-kernel-exception-event )。

このバンドルでは、次のことができます。

  • 小枝の例外テンプレートを、必要なルートの正規表現から変更します
  • 特定の http ステータス コードのみの twig 例外テンプレートを変更します。
  • デバッグ モードのカスタム テンプレートを有効/無効にする

バンドルへのリンク (MIT ライセンス): https://github.com/Kwrz/TwigException

アイデアをありがとう、Peter、次のバージョンのバンドルに機能を追加して、対応するバンドル名前空間からテンプレートを定義すると思います。

于 2015-01-03T13:18:46.000 に答える