感谢你来到这里
我真的很激动
盼望,能有你的支持
捐赠可扫描二维码转账支付
支付宝扫一扫付款
微信扫一扫付款
(微信为保护隐私,不显示你的昵称)
有时候你可能需要在一个实体被创建,更新或者删除的前后执行一些操作。这些操作方法处在一个实体不同的生命周期阶段,所以这些行为被称为”生命周期回调“。
如果你用annotations方式,开启一个生命周期回调,需要如下设置:(如果你不喜欢你也可以使用yaml和xml方式)
1 2 3 4 5 6 7 8 | /**
* @ORM\Entity()
* @ORM\HasLifecycleCallbacks()
*/
class Product
{
// ...
} |
现在你可以告诉Doctrine在任何可用的生命周期事件上来执行一个方法了。比如,假设你想在一个新的实体第一次被创建时设置创建日期列(created)为当前日期。
1 2 3 4 5 6 7 8 9 | // src/AppBundle/Entity/Product.php
/**
* @ORM\PrePersist
*/
public function setCreatedAtValue()
{
$this->createdAt = new \DateTime();
} |
1 2 3 4 5 6 | # src/AppBundle/Resources/config/doctrine/Product.orm.yml
AppBundle\Entity\Product:
type: entity
# ...
lifecycleCallbacks:
prePersist: [setCreatedAtValue] |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | <!-- src/AppBundle/Resources/config/doctrine/Product.orm.xml -->
<?xml version="1.0" encoding="UTF-8" ?>
<doctrine-mapping xmlns="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">
<entity name="AppBundle\Entity\Product">
<!-- ... -->
<lifecycle-callbacks>
<lifecycle-callback type="prePersist" method="setCreatedAtValue" />
</lifecycle-callbacks>
</entity>
</doctrine-mapping> |
上面的例子假设你已经创建了createdAt
属性(为在此处显示)。
现在在实体第一次被保存时,Doctrine会自动调用这个方法使createdAt
字段自动设置为当前日期。
还有一些其他的生命周期事件,你可以使用它。更多生命周期事件和生命周期回调,请查看Doctrine的事件生命周期。
本文,包括例程代码在内,采用的是 Creative Commons BY-SA 3.0 创作共用授权。