如何使用生命周期回调

编辑本页

警告:您正在浏览的文档欧宝体育电话欧宝娱乐app下载地址Symfony 4.1,现已不再维护。

本页的更新版本用于Sy欧宝娱乐app下载地址mfony 6.2(当前稳定版本)。

如何使用生命周期回调

有时,您需要在插入、更新或删除实体之前或之后执行某个操作。这些类型的操作被称为“生命周期”回调,因为它们是你需要在实体生命周期的不同阶段执行的回调方法(例如,实体被插入、更新、删除等)。

如果要对元数据使用注释,首先要启用生命周期回调。如果您使用YAML或XML进行映射,则不需要这样做。

1 2 3 4 5 6 7 8
/ * * *@ORM() * \实体@ORM\ HasLifecycleCallbacks () * /产品/ /……

现在,您可以告诉Doctrine在任何可用的生命周期事件上执行一个方法。例如,假设你想要设置一个createdAtDate列到当前日期,仅当实体第一次被持久化(即插入)时:

  • 注释
  • YAML
  • XML
1 2 3 4 5 6 7 8 9
/ / src /实体/ Product.php/ * * *@ORM\ PrePersist * /公共函数setCreatedAtValue()->createdAt =\ DateTime ();}

请注意

上面的示例假设您已经创建并映射了一个createdAt属性(此处未显示)。

现在,在首次持久化实体之前,Doctrine将自动调用此方法和createdAt字段将被设置为当前日期。

还有一些其他的生命周期事件可以被您钩入。有关其他生命周期事件和生命周期回调的更多信息,请参阅Doctrine生命周期事件文档欧宝体育电话

注意setCreatedAtValue ()方法不接收参数。生命周期回调总是如此,并且是有意为之的:生命周期回调应该是简单的方法,关注实体中的内部数据转换(例如,设置创建/更新字段,生成一个slug值)。

如果您需要做一些更重的提升工作——比如执行日志记录或发送电子邮件——您应该将一个外部类注册为事件侦听器或订阅者,并允许它访问所需的任何资源。有关更多信息,请参见事件监听器和订阅器

此工作,包括代码示例,是根据创作共用BY-SA 3.0许可证。