いくつかのバンドルがあり、バンドルごとに独自のエラー ページをカスタマイズできるかどうかを知りたいです。
クックブックを読んだところ、例にはすべてのバンドルの一般的なカスタマイズ ページしか表示されませんでした。
各バンドルの例外プロセスをオーバーライドする方法はありますか?
リスナー自体がそれを検出する必要があります-単一のバンドルにリスナーを指定する方法は知りません。
<?
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 }
ルートの正規表現構成からさまざまなエラー ページをキャッチするために作成したバンドルがあります。これは、ドキュメント ( http://symfony.com/doc/ current/cookbook/controller/error_pages.html#use-kernel-exception-event )。
このバンドルでは、次のことができます。
バンドルへのリンク (MIT ライセンス): https://github.com/Kwrz/TwigException
アイデアをありがとう、Peter、次のバージョンのバンドルに機能を追加して、対応するバンドル名前空間からテンプレートを定義すると思います。