From ed53f8aa74b2c3617ef1bf933fad53ec15b5fc68 Mon Sep 17 00:00:00 2001 From: Benjamin Eberlei Date: Sun, 23 Jan 2011 17:26:11 +0100 Subject: [PATCH] DDC-958 - Fire postLoad event when calling refresh(). --- .../ORM/Persisters/BasicEntityPersister.php | 12 ++++++++++- .../ORM/Functional/LifecycleCallbackTest.php | 21 +++++++++++++++++++ 2 files changed, 32 insertions(+), 1 deletion(-) diff --git a/lib/Doctrine/ORM/Persisters/BasicEntityPersister.php b/lib/Doctrine/ORM/Persisters/BasicEntityPersister.php index 61e5bb9f2..242a500df 100644 --- a/lib/Doctrine/ORM/Persisters/BasicEntityPersister.php +++ b/lib/Doctrine/ORM/Persisters/BasicEntityPersister.php @@ -28,7 +28,9 @@ use PDO, Doctrine\ORM\Query, Doctrine\ORM\PersistentCollection, Doctrine\ORM\Mapping\MappingException, - Doctrine\ORM\Mapping\ClassMetadata; + Doctrine\ORM\Mapping\ClassMetadata, + Doctrine\ORM\Events, + Doctrine\ORM\Event\LifecycleEventArgs; /** * A BasicEntityPersiter maps an entity to a single table in a relational database. @@ -704,6 +706,14 @@ class BasicEntityPersister } $this->_em->getUnitOfWork()->setOriginalEntityData($entity, $newData); + + if (isset($this->_class->lifecycleCallbacks[Events::postLoad])) { + $this->_class->invokeLifecycleCallbacks(Events::postLoad, $entity); + } + $evm = $this->_em->getEventManager(); + if ($evm->hasListeners(Events::postLoad)) { + $evm->dispatchEvent(Events::postLoad, new LifecycleEventArgs($entity, $this->_em)); + } } /** diff --git a/tests/Doctrine/Tests/ORM/Functional/LifecycleCallbackTest.php b/tests/Doctrine/Tests/ORM/Functional/LifecycleCallbackTest.php index 36a9fca4c..1ddd7a8ff 100644 --- a/tests/Doctrine/Tests/ORM/Functional/LifecycleCallbackTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/LifecycleCallbackTest.php @@ -82,6 +82,27 @@ class LifecycleCallbackTest extends \Doctrine\Tests\OrmFunctionalTestCase $this->assertTrue($reference->postLoadCallbackInvoked); } + /** + * @group DDC-958 + */ + public function testPostLoadTriggeredOnRefresh() + { + $entity = new LifecycleCallbackTestEntity; + $entity->value = 'hello'; + $this->_em->persist($entity); + $this->_em->flush(); + $id = $entity->getId(); + + $this->_em->clear(); + + $reference = $this->_em->find('Doctrine\Tests\ORM\Functional\LifecycleCallbackTestEntity', $id); + $this->assertTrue($reference->postLoadCallbackInvoked); + $reference->postLoadCallbackInvoked = false; + + $this->_em->refresh($reference); + $this->assertTrue($reference->postLoadCallbackInvoked, "postLoad should be invoked when refresh() is called."); + } + /** * @group DDC-113 */