6

コントローラー内からDoctrineExtensionsライフサイクルイベントリスナーを削除しようとしています。

ツリー内のすべてのノードを一度に更新する必要があるため、更新イベントのリスナーを削除する必要があります。ライブラリでサポートされていないものですが、正しい左、右、レベルなどを直接設定することで可能です...

コントローラ内からでもライフサイクルを削除することは可能ですか?この状況の可能な解決策は何ですか。

このようなことがうまくいくかもしれないと思いましたが、うまくいきませんでした

$evm = $em->getEventManager();

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

1 に答える 1

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);
于 2012-10-05T13:40:50.340 に答える