[英]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 }
閱讀本文檔章節以獲取更多信息
(有一段叫做“在服務容器中注冊事件監聽器”)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.