我需要在控制器中禁用Gedmo \ Timestampable侦听器,然后在同一请求中启用它。以下是如何禁用它 https://github.com/Atlantic18/DoctrineExtensions/issues/1722 但我找不到任何关于启用它的信息。有可能吗?
答案 0 :(得分:2)
如果您使用提供的相同解决方案,则会有相应的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
);
}
}
}
}
}
答案 1 :(得分:0)
感谢您的回答。我尝试了与拯救听众的平等解决方案,但它没有奏效。我还发现我在移除听众方面做错了。
为我的字段禁用时间戳功能,并在实体持久化之前直接在实体的服务类中手动更新该值。