2012-10-05 39 views
6

我期待從控制器中刪除Doctrine Extensions life cycle event listener從Symfony2控制器中刪除Doctrine生命週期事件

我需要刪除更新事件的偵聽器,因爲我需要一次更新樹中的所有節點。庫不支持的東西,但可以通過直接設置正確的左,右,水平等來實現......

是否可以從控制器中刪除生命週期?這種情況的可能解決方案是什麼?

我覺得這樣的事情可能會奏效,但它沒有

$evm = $em->getEventManager(); 

$listener = new \Gedmo\Tree\TreeListener(); 
$evm->removeEventListener(array('postUpdate'), $listener); 
+0

FWIW在2016年,使用單根&' NestedTreeRepository :: persistAsLastChildOf'上的所有孩子我能夠實現批量更新而不刪除偵聽器。代碼是10行以下。 – Taylan

回答

14

是的,它會的工作,但也有使用不同的事件:

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

我嘗試過使用數組中的所有事件,並且它們仍在發射。 – Mike

+0

是的,更新了代碼塊 – Gediminas

+0

直接在實體中添加註釋的事件不會出現在這些事件監聽器中,任何想法禁止它們的人? – Leto