我试图实现从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"
行,但我无法在任何地方找到正确的名称。
答案 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异常监听器的默认参数