Symfony2:自动将侦听器添加到调度程序
Symfony2 : automatically adding a listener to a dispatcher
我想收听我创建的自定义事件:
这是活动:
class UserActivationEvent extends Event
{
const NAME = 'my_app.user.activation';
}
由于以下服务,我有了一个事件调度程序:
event_dispatcher:
class: Symfony\Component\EventDispatcher\ContainerAwareEventDispatcher
arguments:
- "@service_container"
我在我的代码中发送我的事件:
$dispatcher = $this->get('event_dispatcher');
$event = new UserActivationEvent();
$dispatcher->dispatch(UserActivationEvent::NAME, $event);
我创建了一个监听器:
class UserActivationListener
{
public function onUserActivation($event)
{
var_dump('I am listening'); exit();
}
}
我注册为服务:
my_app.legacy.listener.user_activation:
class: Acme\LegacyBundle\EventListener\UserActivationListener
tags:
- { name: my_app.event_listener, event: my_app.user.activation }
但是这段代码不会触发我的侦听器。我被迫在我的脚本中添加以下行:
$listener = new UserActivationListener();
$this->dispatcher->addListener(UserActivationEvent::NAME, [$listener, 'onUserActivation']);
然后我可以看到监听器被调用了。
我的问题:
有没有办法在服务声明中向调度程序添加侦听器?
我不希望我的脚本知道听众。
在您的 EventListener
标签中,将 method
属性设置为 onUserActivation
:
my_app.legacy.listener.user_activation:
class: Acme\LegacyBundle\EventListener\UserActivationListener
tags:
- { name: my_app.event_listener, event: my_app.user.activation method: onUserActivation }
让 EventListener
在触发事件时调用此方法。
编辑
您还需要使用标签名称 kernel.event_listener
:
my_app.legacy.listener.user_activation:
class: Acme\LegacyBundle\EventListener\UserActivationListener
tags:
- { name: kernel.event_listener, event: my_app.user.activation method: onUserActivation }
阅读this documentation chapter了解更多信息
(有一段叫做"Registering Event Listeners in the Service Container")。
我想收听我创建的自定义事件:
这是活动:
class UserActivationEvent extends Event
{
const NAME = 'my_app.user.activation';
}
由于以下服务,我有了一个事件调度程序:
event_dispatcher:
class: Symfony\Component\EventDispatcher\ContainerAwareEventDispatcher
arguments:
- "@service_container"
我在我的代码中发送我的事件:
$dispatcher = $this->get('event_dispatcher');
$event = new UserActivationEvent();
$dispatcher->dispatch(UserActivationEvent::NAME, $event);
我创建了一个监听器:
class UserActivationListener
{
public function onUserActivation($event)
{
var_dump('I am listening'); exit();
}
}
我注册为服务:
my_app.legacy.listener.user_activation:
class: Acme\LegacyBundle\EventListener\UserActivationListener
tags:
- { name: my_app.event_listener, event: my_app.user.activation }
但是这段代码不会触发我的侦听器。我被迫在我的脚本中添加以下行:
$listener = new UserActivationListener();
$this->dispatcher->addListener(UserActivationEvent::NAME, [$listener, 'onUserActivation']);
然后我可以看到监听器被调用了。
我的问题:
有没有办法在服务声明中向调度程序添加侦听器? 我不希望我的脚本知道听众。
在您的 EventListener
标签中,将 method
属性设置为 onUserActivation
:
my_app.legacy.listener.user_activation:
class: Acme\LegacyBundle\EventListener\UserActivationListener
tags:
- { name: my_app.event_listener, event: my_app.user.activation method: onUserActivation }
让 EventListener
在触发事件时调用此方法。
编辑
您还需要使用标签名称 kernel.event_listener
:
my_app.legacy.listener.user_activation:
class: Acme\LegacyBundle\EventListener\UserActivationListener
tags:
- { name: kernel.event_listener, event: my_app.user.activation method: onUserActivation }
阅读this documentation chapter了解更多信息
(有一段叫做"Registering Event Listeners in the Service Container")。