Symfony 使用配置文件中的默认值保存新创建的实体,这些默认值对于后续操作是不可变的

Symfony 使用配置文件中的默认值保存新创建的实体,这些默认值对于后续操作是不可变的,symfony,doctrine,symfony-2.8,Symfony,Doctrine,Symfony 2.8,我有一个要求,使用条令保存一个实体,该实体具有从应用程序配置填充的预设值 有多个应用程序使用不同的配置共享相同的代码库 我最初的想法是使用预持久化侦听器,加载配置值并完成,但问题是,在创建实体后,这些属性不应该更改,即使配置文件更改了,原始实体的配置也需要保持最初的状态。即使将实体加载到表单中并在其他值发生更改的情况下重新保存,这些特定的初始应用程序设置也只应在实体创建时设置,并在实体的整个生命周期中保持初始设置 我知道,可以使用实体的setter设置实体上的值,但是由于这些实体是在应用程序中的

我有一个要求,使用条令保存一个实体,该实体具有从应用程序配置填充的预设值

有多个应用程序使用不同的配置共享相同的代码库

我最初的想法是使用预持久化侦听器,加载配置值并完成,但问题是,在创建实体后,这些属性不应该更改,即使配置文件更改了,原始实体的配置也需要保持最初的状态。即使将实体加载到表单中并在其他值发生更改的情况下重新保存,这些特定的初始应用程序设置也只应在实体创建时设置,并在实体的整个生命周期中保持初始设置

我知道,可以使用实体的setter设置实体上的值,但是由于这些实体是在应用程序中的不同位置创建的,因此我认为使用预持久化钩子可以减少代码重复

有没有办法检测一个实体是新创建的,还是我可以使用的另一个侦听器?我浏览了文档,没有看到特定于对象创建的侦听器

我想可能在第一次预持久化时,当对象第一次被创建和持久化时,一些实体属性(如“created”)可能没有在第一次预持久化调用时设置


有没有一种方法可以实现我想做的事情,即在实体创建时设置值,使其在后续的持久化过程中保持不变?

您的方法是正确的。当然,您可以使用文档中指出的
prePersist
事件

prePersist-prePersist事件发生在给定实体的 该实体的相应EntityManager持久化操作为 执行。需要注意的是,此事件仅在 实体的初始持久性(即它不会在将来触发 更新)


我还要为实体添加一个约束,即不可能为所需字段保存具有空值的实体。因此,可以确保不存在不一致性。

预持久化听起来就是您要查找的事件;它仅在初始插入时触发:“…应注意,此事件仅在实体的初始持久化时触发(即,它不会在将来的更新时触发)。”