当应用程序用户对一堆现有实体进行修改(可追溯性问题)时,我必须保留新实体。我在 Doctrine 事件上创建了一个 EventListener onFlush。问题是:这不应该在夹具加载时发生。我这样做是为了防止固定装置触发侦听器,但我想知道这是否是一个好的解决方案:
在我的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
}
这是我提供的最简单的解决方案,如果有问题请告诉我。