加载装置时,在onFlush上禁用eventListener

时间:2018-07-19 09:09:50

标签: doctrine event-listener fixtures

当应用程序用户对一堆现有实体进行修改时,我必须保留新实体(可追溯性问题)。我在主义onFlush事件上创建了一个eventListener。问题是:这不应该附加在灯具上。 我这样做是为了防止灯具触发侦听器,但是我想知道这是否是一个好的解决方案:

输入我的services.yaml

App\DataFixtures\:
    class: App\DataFixtures\LoadFixtures
    tags: [name: doctrine.fixture.orm]
    arguments:
        - '@doctrine.orm.default_entity_manager.event_manager'

在我的App \ DataFixtures \ LoadFixtures中:

public function __construct(EventManager $eventManager)
{
    $this->eventManager = $eventManager;
}

public function load(ObjectManager $manager)
{
   $historizationManager = null;

   foreach ($this->eventManager->getListeners() as $event =>$listeners){
       foreach ($listeners as $key => $listener){
           if($listener instanceof HistorizationManager){
               $historizationManager = $listener;
           }
       }
   }

   if($historizationManager){
       $this->eventManager->removeEventListener(array('onFlush'),$onFlushHistoryListener);
   }

   // doing some work
}

这是我提供的最简单的解决方案,请让我知道这是否有问题。

谢谢

1 个答案:

答案 0 :(得分:-1)

如果仍然存在问题,则可以尝试以下操作:

  • 向EventSubscriber类添加enabled标志,默认为true
  • 使用自动装配使订户可以在夹具加载器中使用
  • 在加载第一个灯具之前将标志设置为false
  • 最后,在处理事件之前检查该标志

但是,如果您找到了更好的方法,很高兴收到您的来信