Find out what has changed through the postUpdate listener in Symfony 2.1

I have a postUpdate listener, and I would like to know what values ​​were before the update and what are the values ​​for writing to the database after the update. Is there a way to do this in Symfony 2.1? I looked at what is stored in getUnitOfWork (), but it is empty because the update has already been completed.

+6
source share
3 answers

Found solution here . What I needed was part of preUpdate (). I needed to call getEntityChangeSet () in LifecycleEventArgs.

My code is:

public function preUpdate(Event\LifecycleEventArgs $eventArgs) { $changeArray = $eventArgs->getEntityChangeSet(); //do stuff with the change array } 
+7
source

Your Entitiy:

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

Your listener:

 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; } } 
0
source

You can find an example in the doctrine documentation.

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

Source: https://habr.com/ru/post/946207/


All Articles