2012-10-05 23 views
6

के भीतर से डॉक्टर जीवन चक्र घटना को हटाएं मैं नियंत्रक के भीतर से Doctrine Extensions life cycle event listener को निकालने के लिए देख रहा हूं।एक सिम्फनी 2 नियंत्रक

मुझे अद्यतन घटनाओं के लिए श्रोता को हटाने की आवश्यकता है क्योंकि मुझे एक बार में पेड़ में सभी नोड्स को अपडेट करने की आवश्यकता है। कुछ ऐसा जो लाइब्रेरी द्वारा समर्थित नहीं है, लेकिन सही बाएं, दाएं, स्तर इत्यादि को सीधे सेट करके संभव है ...

क्या नियंत्रक के भीतर से भी जीवन चक्र को हटाना संभव है? इस स्थिति के लिए एक संभावित समाधान क्या है।

मैंने सोचा था कि कुछ इस तरह काम कर सकते हैं, लेकिन यह हाँ यह काम करेगा नहीं किया

$evm = $em->getEventManager(); 

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

Fwiw, एक मूल और 'का उपयोग कर NestedTreeRepository :: persistAsLastChildOf' सभी बच्चों पर मैं श्रोताओं को हटाए बिना थोक अद्यतन प्राप्त करने में सक्षम था। कोड 10 लाइनों के नीचे है। – Taylan

उत्तर

14

, लेकिन अलग अलग इस्तेमाल किया घटनाओं देखते हैं: 2016 में

$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