我正在使用一些在配置文件中注册的Doctrine监听器进行一些自动更新(created_on,updated_on时间戳等)。
目前,我已经实现了其他功能,这些功能需要将准备好的值存储在数据库中,以便于搜索。

我正在考虑更新Symfony命令,该命令将准备这些值而不是SQL更新脚本(实际上,以数值创建方式进行的任何形式的更改或更新都将只需要运行此单个命令)。但是,这也会触发前面提到的EventListeners。

有没有办法为单个命令禁用特定的EventLister?

最佳答案

这样的事情应该可以解决问题:

$searchedListener = null;
$em = $this->getDoctrine()->getManager();
foreach ($em->getEventManager()->getListeners() as $event => $listeners) {
    foreach ($listeners as $key => $listener) {
        if ($listener instanceof ListenerClassYouLookFor) {
            $searchedListener = $listener;
            break 2;
        }
    }
}
if ($searchedListener) {
    $evm = $em->getEventManager();
    $evm->removeEventListener(array('onFlush'), $searchedListener);
}
else { //listener not found

}

10-05 19:55