Symfony2:为不同的包定制错误页面

时间:2012-06-20 10:22:07

标签: symfony bundles

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

我阅读了食谱,示例仅显示了所有包的通用自定义页面。

有没有办法覆盖每个捆绑包的异常过程?

2 个答案:

答案 0 :(得分: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 :(得分:-1)

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

使用此捆绑包,您可以:

  • 从您想要的路线的正则表达式更改树枝例外模板
  • 仅针对某些http状态代码更改树枝例外模板
  • 启用/禁用调试模式的自定义模板

链接到捆绑包(麻省理工学院许可证):https://github.com/Kwrz/TwigException

感谢你的想法Peter,我想在我的bundle的下一个版本中添加一个功能来定义相应bundle命名空间中的模板。