Symfony2:为不同的Bundle自定义错误页面

13

我有几个代码包,想知道是否可以为每个包定制它们自己的错误页面

我已经阅读了相关教程和示例,但只发现了所有代码包都使用相同的错误页面的情况。

是否存在一种方法可以为每个代码包覆盖异常处理过程?

2个回答

5
监听器本身必须检测到这一点 - 我不知道有任何指定单个 bundle 的监听器的方法。
<?

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 }

-1

我制作了一个捕获不同错误页面的捆绑包,可以从路由正则表达式配置中使用“kernel.exception_listener”侦听器和“kernel.exception”事件(如文档中所述http://symfony.com/doc/current/cookbook/controller/error_pages.html#use-kernel-exception-event)。

使用此捆绑包,您可以:

  • 更改要更改twig异常模板的路由的正则表达式
  • 仅为某些HTTP状态代码更改twig异常模板
  • 启用/禁用调试模式下的自定义模板

捆绑包链接(MIT许可证):https://github.com/Kwrz/TwigException

感谢您的想法Peter,我认为在我的捆绑包的下一个版本中添加一个功能来定义相应捆绑包命名空间的模板。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接