您的位置:首页 > 其它

doctrine 事件

2016-06-21 00:00 316 查看
事件介绍

[code=language-php]use Doctrine\ORM\Events;

Events::preRemove
Events::postRemove
Events::prePersist
Events::postPersist
Events::preUpdate
Events::postUpdate
Events::postLoad
Events::loadClassMetadata
Events::onClassMetadataNotFound
Events::preFlush
Events::onFlush
Events::postFlush
Events::onClear

事件使用

Symfony中使用

[code=language-ini]services:
appbundle.event.doctrine_listener:
class: AppBundle\EventListener\DoctrineListener
tags:
- { name: doctrine.event_subscriber }

[code=plain]namespace AppBundle\EventListener;

use Doctrine\Common\EventSubscriber;
use Doctrine\ORM\Events;
use Doctrine\ORM\Event\LifecycleEventArgs;
use Doctrine\ORM\Event\PreUpdateEventArgs;
use Doctrine\ORM\Event\PreFlushEventArgs;
use Doctrine\ORM\Event\PostFlushEventArgs;

class DoctrineListener implements EventSubscriber
{
public function getSubscribedEvents()
{
return array(
Events::prePersist,
Events::postPersist,
Events::preUpdate,
Events::postUpdate,
Events::preFlush,
Events::postFlush,
);
}

public function prePersist(LifecycleEventArgs $args)
{
//插入数据库前
}

public function postPersist(LifecycleEventArgs $args)
{
//插入数据库后
}

public function preUpdate(PreUpdateEventArgs $args)
{
//修改数据库之前
$entity = $args->getEntity();
//判断Entity类型
if($entity instanceof XxInterface){
//跟原始数据差异,更改了哪些字段
//$charged = ['title' => ['old title', 'new title']]
$changed = $args->getEntityChangeSet();
//根据修改值,进行其它操作
}
}

public function postUpdate(LifecycleEventArgs $args)
{
//修改数据库后
}

public function preFlush(PreFlushEventArgs $args)
{
//保存数据库之前
//注:经测试,在 prePersist后/preUpdate前,很诡异
}

public function postFlush(PostFlushEventArgs $args)
{
//保存数据库后 在 postPersist/postUpdate 后
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  doctrine