symfony - 是否可以禁用 Symfony 2 事件监听器然后重新启用它

标签 symfony events

我需要在 Controller 中禁用 Gedmo\Timestampable 监听器,然后在同一请求中重新启用它。这是禁用它的方法 https://github.com/Atlantic18/DoctrineExtensions/issues/1722 但我找不到任何关于启用它的信息。可能吗?

最佳答案

如果您使用提供的相同解决方案,则有一个相应的 addEventListener() 函数。您可能希望首先将所有事件监听器保存在其他地方(可能在同一个类中)。像这样:

class MyClass
{
    private $listeners;

    private function disableTimestampable()
    {
        $evm = $this->em->getEventManager();

        $this->listeners = $evm->getListeners();

        foreach ($evm->getListeners() as $event => $listeners) {
            foreach ($listeners as $hash => $listener) {
                if ($listener instanceof \Gedmo\Timestampable\TimestampableListener) {
                    $evm->removeEventListener(
                        array('prePersist', 'loadClassMetadata', 'onFlush'),
                        $listener
                    );
                }
            }
        }
    }

    private function enableTimestampable()
    {
        $evm = $this->em->getEventManager();

        foreach ($this->listeners as $event => $listeners) {
            foreach ($listeners as $hash => $listener) {
                if ($listener instanceof \Gedmo\Timestampable\TimestampableListener) {
                    $evm->addEventListener(
                        array('prePersist', 'loadClassMetadata', 'onFlush'),
                        $listener
                    );
                }
            }
        }
    }
}

关于symfony - 是否可以禁用 Symfony 2 事件监听器然后重新启用它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45615073/

相关文章:

php - 在 Symfony2 上创建多色选择框

mysql - Doctrine2 多级单表继承(未知列)

php - Symfony4 总是重定向到 index.php

php - Assetic watch 突然停止工作

php - laravel 模型 $events 没有被触发

c# - .NET Treeview 不会在空控件上发送单击事件

javascript - HTML、Javascript 中的自定义事件

angularjs - 如何拦截 angular.js 中的所有 $rootScope.$broadcast 事件

php - 奇怪的意外 T_STRING 错误

c++ - Qt:如何向操作系统/窗口系统发送事件?