如何使用生命周期回调
编辑本页警告:您正在浏览的文档欧宝官网下载appob娱乐下载Symfony 4.1,现已不再维护。
读本页的更新版本用于Syob娱乐下载mfony 6.2(当前稳定版本)。
如何使用生命周期回调
有时,您需要在插入、更新或删除实体之前或之后执行某个操作。这些类型的操作被称为“生命周期”回调,因为它们是你需要在实体生命周期的不同阶段执行的回调方法(例如,实体被插入、更新、删除等)。
如果要对元数据使用注释,首先要启用生命周期回调。如果您使用YAML或XML进行映射,则不需要这样做。
1 2 3 4 5 6 7 8
/ * * *@ORM() * \实体@ORM\ HasLifecycleCallbacks () * /类产品{/ /……}
现在,您可以告诉Doctrine在任何可用的生命周期事件上执行一个方法。例如,假设你想要设置一个createdAt
Date列到当前日期,仅当实体第一次被持久化(即插入)时:
- 注释
- YAML
- XML
1 2 3 4 5 6 7 8 9
/ / src /实体/ Product.php/ * * *@ORM\ PrePersist * /公共函数setCreatedAtValue(){$这->createdAt =新\ DateTime ();}
1 2 3 4 5 6
#配置/理论/ Product.orm.yml应用实体\ \产品:类型:实体#……lifecycleCallbacks:prePersist:(setCreatedAtValue)
12 3 4 5 6 7 8 9 10 11 12 13 14
<!——config/doctrine/Product.orm.xml——> .xml<??> . xml version="1.0" encoding="UTF-8"<doctrine-mappingxmlns=“http://doctrine-project.org/schemas/orm/doctrine-mapping”xmlns: xsi=“http://www.w3.org/2001/XMLSchema-instance”xsi: schemaLocation=“http://doctrine-project.org/schemas/orm/doctrine-mapping http://doctrine-project.org/schemas/orm/doctrine-mapping.xsd”><实体的名字=“应用程序实体\ \产品”><!——……--><lifecycle-callbacks><生命周期回调类型=“prePersist”方法=“setCreatedAtValue”/>lifecycle-callbacks>实体>doctrine-mapping>
请注意
上面的示例假设您已经创建并映射了一个createdAt
属性(此处未显示)。
现在,在首次持久化实体之前,Doctrine将自动调用此方法和createdAt
字段将被设置为当前日期。
还有一些其他的生命周期事件可以被您钩入。有关其他生命周期事件和生命周期回调的更多信息,请参阅Doctrine生命周期事件文档欧宝官网下载app.
生命周期回调和事件监听器
注意setCreatedAtValue ()
方法不接收参数。生命周期回调总是如此,并且是有意为之的:生命周期回调应该是简单的方法,关注实体中的内部数据转换(例如,设置创建/更新字段,生成一个slug值)。
如果您需要做一些更重的提升工作——比如执行日志记录或发送电子邮件——您应该将一个外部类注册为事件侦听器或订阅者,并允许它访问所需的任何资源。有关更多信息,请参见事件监听器和订阅器.
此工作,包括代码示例,是根据创作共用BY-SA 3.0许可证。