Symfony2动态添加事件监听器

3
你如何在不使用services.yml模式的情况下动态地向内核添加事件侦听器(在我的情况下,它是一个Doctrine事件)?
1个回答

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

现在,如果您想动态注册这些事件,需要将 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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接