2012-10-05 14 views
6

Bir denetleyiciden Doctrine Extensions life cycle event listener'u kaldırmak istiyorum.Doctrine life cycle olayı Symfony2 denetleyicisinden çıkartın

Güncelleme olayları için dinleyiciyi kaldırmam gerekiyor çünkü ağaçtaki tüm düğümleri bir kerede güncellemem gerekiyor. Kitaplık tarafından desteklenmeyen, ancak doğrudan doğru sol, sağ, düzey ayarlanarak mümkün olan bir şey ...

Bir denetleyiciden bile bir yaşam döngüsünü kaldırmak mümkün mü? Bu durum için olası bir çözüm nedir.

Böyle bir şey işe yarayabilecek düşündüm, ama evet işe yarayacak

$evm = $em->getEventManager(); 

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

FWIW 2016 yılında, NestedTreeRepository :: persistAsLastChildOf' tüm çocuklarda dinleyicileri kaldırmadan toplu güncelleme yapabildim. Kod 10 satırın altında. – Taylan

cevap

14

vermedi, ancak kullanılan farklı olaylar vardır: Tek kök & `kullanılarak

$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

Dizideki tüm olaylarla denedim ve hala ateş ediyorlar. – Mike

+0

evet, kod bloğu – Gediminas

+0

güncellendi Olaylar ek açıklamalarla doğrudan eklenenler bu olay dinleyicilerinde görünmüyor, bunları devre dışı bırakacak herhangi bir fikir var mı? – Leto