Model view controller 从Symfony2控制器中删除条令生命周期事件

Model view controller 从Symfony2控制器中删除条令生命周期事件,model-view-controller,events,symfony,doctrine,doctrine-orm,Model View Controller,Events,Symfony,Doctrine,Doctrine Orm,我希望从控制器中删除 我需要删除更新事件的侦听器,因为我需要一次更新树中的所有节点。库不支持的内容,但可以通过直接设置正确的左、右、标高等来实现 甚至可以从控制器中删除生命周期吗?这种情况的可能解决方案是什么 我原以为这样可能行得通,但事实并非如此 $evm = $em->getEventManager(); $listener = new \Gedmo\Tree\TreeListener(); $evm->removeEventListener( array( 'postUpda

我希望从控制器中删除

我需要删除更新事件的侦听器,因为我需要一次更新树中的所有节点。库不支持的内容,但可以通过直接设置正确的左、右、标高等来实现

甚至可以从控制器中删除生命周期吗?这种情况的可能解决方案是什么

我原以为这样可能行得通,但事实并非如此

$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);

我对数组中的所有事件都进行了尝试,但它们仍在触发。直接在实体中添加注释的事件不会出现在这些事件侦听器中,您知道谁要禁用它们吗?您不能通过侦听器禁用它们,唯一的方法是直接修改元数据,请参见
$em->getClassMetadata($entityClassName)->lifecycleCallbacks
请注意,同一个侦听器可以附加到多个事件,也可以是同一个实例。在这种情况下,考虑删除<代码>中的侦听器,如果语句,并且在这样做之后不要使用<代码>中断< /代码>。例如,使用这个
$evm->removeEventListener($hash,$listener)
FWIW在2016年,在所有子项上使用单根&
NestedTreeRepository::persistAsLastChildOf
我能够在不删除侦听器的情况下实现批量更新。代码不超过10行。