你如何在不使用services.yml模式的情况下动态地向内核添加事件侦听器(在我的情况下,它是一个Doctrine事件)?
在查找供应商目录和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
services.yml
中的 event_listener
资源保留,但删除标记部分,并按照以下方式动态添加它们:if (something) {
$evm = $em->getConnection()->getEventManager();
$evm->addEventListener(
[
0 => 'preRemove',
1 => 'onFlush'
],
$this->container->get('event_listener');
}
JMSSerializerBundle
完成这个任务?我正在检查代码,不幸的是这似乎是无法实现的。 - Bertuz$em->getConnection()->getEventManager()->addEventListener(...)
时,没有接口可以指定优先级。 - olidem