2013-05-30 22 views

回答

7

找到解决方案here。我需要的实际上是preUpdate()的一部分。我需要在LifecycleEventArgs上调用getEntityChangeSet()。

我的代码:

public function preUpdate(Event\LifecycleEventArgs $eventArgs) 
{ 
    $changeArray = $eventArgs->getEntityChangeSet(); 

    //do stuff with the change array 

} 
+4

您的意思是'更新前(事件\ PreUpdateEventArgs $ EventArgs的)'? 'LifeEventArgsSet'中不存在'getEntityChangeSet()'方法。 – Lughino

+1

链接已损坏,请尽可能更新。 – mboullouz

+0

链接权限被拒绝 –

-1

可以主义文档中找到example

class NeverAliceOnlyBobListener 
{ 
    public function preUpdate(PreUpdateEventArgs $eventArgs) 
    { 
     if ($eventArgs->getEntity() instanceof User) { 
      if ($eventArgs->hasChangedField('name') && $eventArgs->getNewValue('name') == 'Alice') { 
       $eventArgs->setNewValue('name', 'Bob'); 
      } 
     } 
    } 
} 
+0

OP特别要求“更新前的值和更新后数据库条目的值是什么”,您的响应需要针对每列需要硬编码的方法调用。 – ahonnecke

0

你Entitiy:

/** 
* Order 
* 
* @ORM\Table(name="order") 
* @ORM\Entity() 
* @ORM\EntityListeners(
*  {"\EventListeners\OrderListener"} 
*) 
*/ 
class Order 
{ 
... 

你的听众:

class OrderListener 
{ 
    protected $needsFlush = false; 
    protected $fields = false; 

    public function preUpdate($entity, LifecycleEventArgs $eventArgs) 
    { 
     if (!$this->isCorrectObject($entity)) { 
      return null; 
     } 

     return $this->setFields($entity, $eventArgs); 
    } 


    public function postUpdate($entity, LifecycleEventArgs $eventArgs) 
    { 
     if (!$this->isCorrectObject($entity)) { 
      return null; 
     } 

     foreach ($this->fields as $field => $detail) { 
      echo $field. ' was ' . $detail[0] 
         . ' and is now ' . $detail[1]; 

      //this is where you would save something 
     } 

     $eventArgs->getEntityManager()->flush(); 

     return true; 
    } 

    public function setFields($entity, LifecycleEventArgs $eventArgs) 
    { 
     $this->fields = array_diff_key(
      $eventArgs->getEntityChangeSet(), 
      [ 'modified'=>0 ] 
     ); 

     return true; 
    } 

    public function isCorrectObject($entity) 
    { 
     return $entity instanceof Order; 
    } 
} 
相关问题