首先发生了什么 - Symfony2仍然存在

时间:2014-08-28 13:01:16

标签: forms symfony doctrine-orm

我一直想知道symfony2首先会发生关于实体持久性的事情。

让我们举个例子说我在我的控制器中有一个函数,它在持久化数据时调用,但我还有一个运行PrePersist的生命周期回调。首先运行哪个功能?

此外,如果我希望根据用户提交的值(从表单)执行某种计算,最好是从控制器内部还是从实体内部执行此操作,再次使用PrePersist回调?

1 个答案:

答案 0 :(得分:1)

拉丁语前缀 pre 表示“之前”。 ;)因此PrePersist回调将在持久化之前应用。

如果您在持久化时调用某些功能,则取决于$EntityManager->persist()之前或之后。 LifecycleCallback是持久化操作的“原子”。详细地说,这意味着在UnitOfWork计算应该写入数据库的修改之前应用LifecycleCallback。

您还应该记住,在致电$EntityManager->flush()之前,没有任何内容写入数据库。

至于计算:没有硬性规则,但作为一条经验法则:

  • 如果所需的所有逻辑在实体的上下文中都可用,并且实体外部的组件不需要知道传递值的转换,则可以在实体的getter / setter中执行。
  • 只要外部组件受到影响,或者您需要外部服务进行修改,您一定要在控制器或专用管理服务中进行。