从Symfony默认异常监听器派生自定义异常监听器:正确的服务参数是什么?

时间:2014-12-30 12:26:27

标签: symfony exception-handling

我试图实现从Symfony的默认异常监听器派生的自定义异常监听器。最小的代码是:

use Symfony\Component\HttpKernel\EventListener\ExceptionListener as SymfonyExceptionListener;
namespace MyCompany\MyBundle\EventListener;

class ExceptionListener extends SymfonyExceptionListener {

  public function __construct( $controller, LoggerInterface $logger = null ) {
    parent::__construct( $controller, $logger );
  }

  public static function getSubscribedEvents() {
    // The parent class has priority -128
    return array(
      KernelEvents::EXCEPTION => array( 'onKernelException', -64 ),
    );
  }
}

显然,我需要将控制器和记录器注入构造函数中,这就是我的问题开始的地方。根据文档,我需要通过以下方式注册服务:

services:
  kernel.listener.custom_exception_listener:
    class: MyCompany\MyBundle\EventListener\ExceptionListener
    arguments: []
    tags:
      - { name: kernel.event_listener, event: kernel.exception, method: onKernelException, priority: -64 }

我需要将哪些内容放入arguments: []?它必须是"@controller @logger-service"行,但我无法在任何地方找到正确的名称。

1 个答案:

答案 0 :(得分:0)

现在注册自定义异常监听器 - 只是注册一些监听器。这里的最小代码是:

class ExceptionListener
{
   public function listenExceptions(GetResponseForExceptionEvent $event)
   {
      // Some event management
   }
}

并配置:

services:
  kernel.listener.custom_exception_listener:
    class: MyCompany\MyBundle\EventListener\ExceptionListener
    tags:
       - { name: kernel.event_listener, event: kernel.exception, method: listenExceptions, priority: -64 }

因此,要注册监听器,您不应扩展内容或注入服务。 另一方面,您可能需要一些服务来处理事件(记录器或邮件程序)。在这种情况下,您应该创建构造函数并注入您将要使用的服务。

如果您想扩展Symfony2 ExceptionListener(订阅者),%twig.exception_listener.controller%@logger是Symfony2异常监听器的默认参数