2013-05-30 29 views

cevap

7

Çözüm bulundu here. İhtiyacım olan şey aslında preUpdate() programının bir parçasıydı. LifecycleEventArgs üzerinde getEntityChangeSet() öğesini çağırmam gerekiyordu.

Kodum:

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

    //do stuff with the change array 

} 
+4

'preUpdate (Olay \ PreUpdateEventArgs $ eventArgs)'? 'GetEntityChangeSet()' yöntemi 'LifecycleEventArgs' içinde mevcut değil – Lughino

+1

Bağlantı bozuksa, lütfen mümkünse güncelleştirin. – mboullouz

+0

bağlantı İzin Reddedildi –

-1

Sen doktrin belgelerinde example bulabilirsiniz.

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 özellikle "değerler güncellemeden önce ve DB girdisi için güncellemeden sonra ne olduğunu" sordu, yanıtınız her kod için kodlanmış olması gereken bir yöntem çağrısı gerektiriyor. – ahonnecke

0

Sizin eden taraf:

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

telsizinde:

aradınız
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; 
    } 
}