2014-10-27 34 views
0

我使用symfony2与教条。 我想在实体的特殊属性发生变化时进行一些更改;实际上我想保存我的属性的更改并具有其更改的状态。 我怎么能说,例如,当任何领域的变化做相关的更改字段的名称。做一些特殊的领域改变(学说)

例如,如果电子邮件发生变化,则向另一个实体添加一些行。

谢谢。

回答

2

你应该能够做到与学说的听众和的UnitOfWork变更,事情是这样的:

use Doctrine\ORM\Event\LifecycleEventArgs; 

class DoctrineListener 
{ 
    public function preUpdate(LifecycleEventArgs $args) 
    { 
     $entity = $args->getEntity(); 
     $entityManager = $args->getEntityManager(); 

     if ($entity instanceof MyEntityClass) { 
      $changeSet = $entityManager->getUnitOfWork()->getEntityChangeSet($entity); 
      if (isset($changeSet['my_field'])) { 
       //do something here 
      } 
     } 
    } 
} 

例如,这是怎样的一些学说的扩展正在注册自己的变化。

+0

感谢你的答案:),我了解这样做会任何更新之前运行,是吗?那么它的表现如何呢? – parisssss 2014-10-27 14:48:37

+0

是的,当实体即将更新时(实体存在,并在调用persist之前对其应用某些更改),会触发“preUpdate”原则事件。我不确定要理解你的问题。 “表演”? – 2014-10-27 15:39:21

+0

我的意思是它在服务器上的负载是多少?最好在你的动作中手动检查属性更改还是有这种类型的监听器? – parisssss 2014-10-27 16:01:18