2014-10-27 29 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