事件介绍
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中使用
services:
appbundle.event.doctrine_listener:
class: AppBundle\EventListener\DoctrineListener
tags:
- { name: doctrine.event_subscriber }
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 后
}
}