2012-10-05 26 views
6

Tôi đang tìm cách xóa Doctrine Extensions life cycle event listener khỏi bộ điều khiển.Xóa sự kiện vòng đời Doctrine khỏi bộ điều khiển Symfony2

Tôi cần phải loại bỏ trình lắng nghe cho các sự kiện cập nhật vì tôi cần cập nhật tất cả các nút trong cây cùng một lúc. Nội dung nào đó không được thư viện hỗ trợ, nhưng có thể bằng cách trực tiếp đặt đúng, bên phải, cấp độ vv ...

Có thể loại bỏ vòng đời ngay cả trong bộ điều khiển không? Một giải pháp khả thi cho tình huống này là gì.

Tôi nghĩ một cái gì đó như thế này có thể làm việc, nhưng nó đã không

$evm = $em->getEventManager(); 

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

FWIW vào năm 2016, sử dụng gốc duy nhất & ' NestedTreeRepository :: persistAsLastChildOf' trên tất cả các trẻ em tôi đã có thể đạt được cập nhật hàng loạt mà không cần xóa người nghe. Mã dưới 10 dòng. – Taylan

Trả lời

14

có nó sẽ làm việc, nhưng có những sự kiện khác nhau được sử dụng:

$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

Tôi đã thử nó với tất cả các sự kiện trong mảng và chúng vẫn đang bắn. – Mike

+0

có, cập nhật khối mã – Gediminas

+0

Sự kiện được thêm với chú thích trực tiếp trong thực thể không xuất hiện trong những người nghe sự kiện này, bất kỳ ý tưởng nào để vô hiệu hóa chúng? – Leto

Các vấn đề liên quan