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

Saving a newly created entity with default values from config file that are immutable for subsequent persists

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

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

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

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

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

我想也许在第一次预持久化时,某些实体属性(例如 "created" 可能未在首次创建和持久化对象时调用第一次预持久化时设置。

有没有一种方法可以实现我正在尝试做的事情,某种方法可以为实体创建设置值,该值在后续持续存在时是不可变的?

你走对了。当然,您可以使用文档中指出的 prePersist 事件

https://www.doctrine-project.org/projects/doctrine-orm/en/2.6/reference/events.html#lifecycle-events

prePersist - The prePersist event occurs for a given entity before the respective EntityManager persist operation for that entity is executed. It should be noted that this event is only triggered on initial persist of an entity (i.e. it does not trigger on future updates).

我还要为实体添加一个约束,即无法为所需字段保存空值的实体。所以保证没有不一致。