如何处理生命周期回调
编辑该页面警告:你浏览的文档欧宝官网下载appob娱乐下载Symfony 2.8,不再维护。
读这个页面的更新版本Symfob娱乐下载ony 6.2(当前的稳定版本)。
如何处理生命周期回调
有时,您需要执行一个动作之前或之后插入一个实体,更新或删除。这些类型的行为被称为“生命周期”回调,作为他们回调方法,您需要执行在一个实体的生命周期的不同阶段(如实体插入、更新、删除等)。
如果你使用元数据注释,首先使生命周期回调。这不是必要的,如果你使用YAML或XML映射。
1 2 3 4 5 6 7 8
/ * * *@ORM()* \实体@ORM\ HasLifecycleCallbacks () * /类产品{/ /……}
现在,你可以告诉原则来执行一个方法在任何可用的生命周期事件。例如,假设您想要设置一个createdAt
日期列当前日期,只有当首先坚持实体(即插入):
- 注释
- YAML
- XML
1 2 3 4 5 6 7 8 9
/ / src / AppBundle /实体/ Product.php/ * * *@ORM\ PrePersist * /公共函数setCreatedAtValue(){美元这- >createdAt =新\ DateTime ();}
1 2 3 4 5 6
# src / AppBundle /资源/ config /理论/ Product.orm.ymlAppBundle \实体\产品:类型:实体#……lifecycleCallbacks:prePersist:(setCreatedAtValue)
1 2 3 4 5 6 7 8 9 10 11 12 13 14
< !——src / AppBundle /资源/ config /理论/ Product.orm。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”><实体的名字=“AppBundle \实体\产品”>< !——……- - ><lifecycle-callbacks><生命周期回调类型=“prePersist”方法=“setCreatedAtValue”/ >< /lifecycle-callbacks>< /实体>< /doctrine-mapping>
请注意
上面的示例假设您已经创建了映射createdAt
财产(这里没有显示)。
首先在实体是坚持,教义将自动调用这个方法,createdAt
字段将被设置为当前日期。
还有其他几个生命周期可以钩到的事件。更多信息在其他生命周期事件和生命周期回调,看到教义的生命周期事件文档欧宝官网下载app。
生命周期回调函数和事件监听器
请注意,setCreatedAtValue ()
方法不接受任何参数。总是这样生命周期回调,故意:生命周期回调应关注内部的简单方法转换数据的实体(例如,设置一个创建/更新字段,生成一个鼻涕虫值)。
如果你需要做一些较重的任务——就像执行日志记录或发送电子邮件,你应该注册一个外部类作为一个事件侦听器或用户并赋予它获得您需要的任何资源。有关更多信息,请参见学说事件监听器和用户。
这项工作,包括代码示例,许可下Creative Commons冲锋队3.0许可证。