我想从 Controller 中删除Doctrine Extensions life cycle event listener。
我需要删除更新事件的监听器,因为我需要立即更新树中的所有节点。库不支持的某些操作,但是可以通过直接设置正确的左,右,水平等来实现。
是否可以从 Controller 内部删除生命周期?对于这种情况有什么可能的解决方案。
我以为这样的事情可能行得通,但没有成功
$evm = $em->getEventManager();
$listener = new \Gedmo\Tree\TreeListener();
$evm->removeEventListener( array( 'postUpdate' ), $listener );
最佳答案
是的,它将起作用,但是使用了不同的事件:
$listenerInst = null;
$em; /* entity manager */
foreach ($em->getEventManager()->getListeners() as $event => $listeners) {
foreach ($listeners as $hash => $listener) {
if ($listener instanceof WantedListenerClass) {
$listenerInst = $listener;
break 2;
}
}
}
$listenerInst || die('Listener is not registered in the event manager');
// then you can remove events you like:
$evm = $em->getEventManager();
$evm->removeEventListener(array('onFlush'), $listenerInst);