如何在不使用services.yml模式的情况下动态地向内核添加事件监听器(在我的情况下,它是一个doctrine事件)?
答案 0 :(得分:5)
在深入挖掘供应商目录和appProdProjectContainer.php
文件后,我自己找到了答案。如果您希望将事件注册到事件管理器,则必须在services.yml
中为要触发的事件指定标记,如:
event_listener:
class: Company\MyBundle\Listener\MyListener
arguments: [@security.context, @logger]
tags:
-
name: doctrine.event_listener
event: preRemove
-
name: doctrine.event_listener
event: onFlush
现在,如果您想动态注册这些事件,则需要将event_listener
资源保留在services.yml
中,但删除标记部分并动态添加,如下所示:
if (something) {
$evm = $em->getConnection()->getEventManager();
$evm->addEventListener(
[
0 => 'preRemove',
1 => 'onFlush'
],
$this->container->get('event_listener');
}