gpt4 book ai didi

php - 如何使@PrePersist 注释的方法在@Timestampable 设置属性之前运行?

转载 作者:搜寻专家 更新时间:2023-10-31 21:25:56 27 4
gpt4 key购买 nike

我有一个实体

class Foo{
/**
* @var \DateTime
* @Gedmo\Timestampable(on="create")
* @ORM\Column(type="datetimetz")
*/
private $createdAt;

/**
* @ORM\PrePersist
*/
public function bar()
{
$this->createdAt->getTimestamp();
}
}

不幸的是,Foo::bar() 在 TimestampableListener 有机会设置 $this->createdAt 的正确值之前运行。

我试图更改 services.yml 中事件监听器的优先级(如 Can I define the order in which event listeners / subscribers are called in doctrine? 中所暗示),但它不起作用。

最佳答案

正如您在 Doctrine 的 ListenersInvoker 中看到的那样LifecycleCallbacksEntityListeners 之前调用,因此 TimestampableListener 永远不会在 PrePersist 注释之前运行。

您可以创建自己的 EntityListener 来监听 prePersist 事件并调用您的 bar 方法并使用优先级来更改顺序。或者,在定义 createdAt 的情况下,您可以避免使用 Timestampable 并在构造函数中手动设置 createdAt 值。

关于php - 如何使@PrePersist 注释的方法在@Timestampable 设置属性之前运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36154430/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com