From ae6e597dcadc6d3034911a7bfb732d56fe1ccdb1 Mon Sep 17 00:00:00 2001 From: romanb Date: Wed, 10 Feb 2010 22:17:43 +0000 Subject: [PATCH] [2.0][DDC-311] Fixed. --- .../ORM/Mapping/ClassMetadataFactory.php | 1 + .../ORM/Mapping/ClassMetadataInfo.php | 11 +++++++++ .../ORM/Functional/LifecycleCallbackTest.php | 24 +++++++++++++++++-- 3 files changed, 34 insertions(+), 2 deletions(-) diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php b/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php index 5594e38ea..5117831e4 100644 --- a/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php +++ b/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php @@ -219,6 +219,7 @@ class ClassMetadataFactory $class->setVersioned($parent->isVersioned); $class->setVersionField($parent->versionField); $class->setDiscriminatorMap($parent->discriminatorMap); + $class->setLifecycleCallbacks($parent->lifecycleCallbacks); } // Invoke driver diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadataInfo.php b/lib/Doctrine/ORM/Mapping/ClassMetadataInfo.php index 94a7d86b3..3c2d65392 100644 --- a/lib/Doctrine/ORM/Mapping/ClassMetadataInfo.php +++ b/lib/Doctrine/ORM/Mapping/ClassMetadataInfo.php @@ -1371,6 +1371,17 @@ class ClassMetadataInfo { $this->lifecycleCallbacks[$event][] = $callback; } + + /** + * Sets the lifecycle callbacks for entities of this class. + * Any previously registered callbacks are overwritten. + * + * @param array $callbacks + */ + public function setLifecycleCallbacks(array $callbacks) + { + $this->lifecycleCallbacks = $callbacks; + } /** * Sets the discriminator column definition. diff --git a/tests/Doctrine/Tests/ORM/Functional/LifecycleCallbackTest.php b/tests/Doctrine/Tests/ORM/Functional/LifecycleCallbackTest.php index 63ff7dd34..8d323487b 100644 --- a/tests/Doctrine/Tests/ORM/Functional/LifecycleCallbackTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/LifecycleCallbackTest.php @@ -105,11 +105,17 @@ class LifecycleCallbackTest extends \Doctrine\Tests\OrmFunctionalTestCase $this->assertTrue($e1->prePersistCallbackInvoked); $this->assertTrue($e2->prePersistCallbackInvoked); } + + public function testLifecycleCallbacksGetInherited() + { + $childMeta = $this->_em->getClassMetadata(__NAMESPACE__ . '\LifecycleCallbackChildEntity'); + $this->assertEquals(array('prePersist' => array(0 => 'doStuff')), $childMeta->lifecycleCallbacks); + } } /** @Entity @HasLifecycleCallbacks */ class LifecycleCallbackTestUser { - /** @Id @Column(type="integer") @GeneratedValue(strategy="AUTO") */ + /** @Id @Column(type="integer") @GeneratedValue */ private $id; /** @Column(type="string") */ private $value; @@ -198,4 +204,18 @@ class LifecycleCallbackCascader { $this->entities = new \Doctrine\Common\Collections\ArrayCollection(); } -} \ No newline at end of file +} + +/** @MappedSuperclass @HasLifecycleCallbacks */ +class LifecycleCallbackParentEntity { + /** @PrePersist */ + function doStuff() { + + } +} + +/** @Entity @Table(name="lc_cb_childentity") */ +class LifecycleCallbackChildEntity extends LifecycleCallbackParentEntity { + /** @Id @Column(type="integer") @GeneratedValue */ + private $id; +}