我需要在 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/