我有几个代码包,想知道是否可以为每个包定制它们自己的错误页面。
我已经阅读了相关教程和示例,但只发现了所有代码包都使用相同的错误页面的情况。
是否存在一种方法可以为每个代码包覆盖异常处理过程?
<?
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 }
我制作了一个捕获不同错误页面的捆绑包,可以从路由正则表达式配置中使用“kernel.exception_listener”侦听器和“kernel.exception”事件(如文档中所述http://symfony.com/doc/current/cookbook/controller/error_pages.html#use-kernel-exception-event)。
使用此捆绑包,您可以:
捆绑包链接(MIT许可证):https://github.com/Kwrz/TwigException
感谢您的想法Peter,我认为在我的捆绑包的下一个版本中添加一个功能来定义相应捆绑包命名空间的模板。