Symfony 2: Disable Doctrine event listener in ContainerAwareCommand

夙愿已清 提交于 2019-12-04 05:48:00

something like this should do the trick :

$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

}

It make more sense to wrap the logic inside Doctrine listener around a:

if ($this->enabled) {

So everyone can understand that the logic can be disabled or not.

You could use a parameter to enable or not the code (see http://symfony.com/doc/current/service_container/parameters.html).

my_doctrine_listener_enabled: true

You set it to false in your command:

$container->setParameter('my_doctrine_listener_enabled', false);

Since the parameter is modified at runtime, I recommend you to not use it via DIC but via

$container->getParameter('my_doctrine_listener_enabled')

Or another approach, could be:

  1. Create variable "enabled" inside Doctrine listener
  2. Inject Doctrine listener in command
  3. Set $this->myListener->enabled = false
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!