Symfony2动态添加事件侦听器 [英] Symfony2 add event listener dynamically

查看:73
本文介绍了Symfony2动态添加事件侦听器的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如何在不使用services.yml模式的情况下将事件侦听器(在我的情况下是一个学说的事件)动态地添加到内核?

How would you add an event listener (in my case it's a doctrine event) dynamically to the kernel without using services.yml pattern?

推荐答案

在深入研究供应商目录和 appProdProjectContainer.php 文件后,我自己找到了答案。如果您想将事件注册到事件管理器,则必须在 services.yml 中为您希望触发事件的事件指定标签,例如:

I found the answer myself after doing some digging into the vendor directory and appProdProjectContainer.php file. If you want your events to be registered with event manager you have to specify the tags in your services.yml for the events that you want this to trigger for like:

  event_listener:
      class: Company\MyBundle\Listener\MyListener
      arguments: [@security.context, @logger]
      tags:
          -   
              name: doctrine.event_listener
              event: preRemove
          -   
              name: doctrine.event_listener
              event: onFlush

现在,如果要动态注册这些事件,则需要离开<$ c $ services.yml 中的c> event_listener 资源,但删除标签部分并动态添加它们,如下所示:

Now if you want to dynamically register these events, you need to leave the event_listener resource in services.yml, but delete the tags part and dynamically add them that as follow:

if (something) {
  $evm = $em->getConnection()->getEventManager();
  $evm->addEventListener(
      [
        0 => 'preRemove',
        1 => 'onFlush'
      ],
      $this->container->get('event_listener');
}

这篇关于Symfony2动态添加事件侦听器的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆