From f5bc18d6483202f2405787db997e1a494c427220 Mon Sep 17 00:00:00 2001 From: Christian Flothmann Date: Fri, 8 Aug 2014 10:52:31 +0200 Subject: [PATCH] return empty metadata collection if none do exist The PropertyMetadataContainerInterface defines that the method getPropertyMetadata() has to return an empty collection if no metadata have been configured for the given property. Though, its implementation in the ClassMetadata class didn't check for existence of such metadata. This behavior led to unexpected PHP notices when validating a property or a property value of a property without any configured constraints (only affects the new 2.5 API). Additionally, the getMemberMetadatas() didn't check for existing array keys as well which has also been fixed. --- .../Validator/Mapping/ClassMetadata.php | 8 ++++++++ .../Tests/Mapping/ClassMetadataTest.php | 16 ++++++++++++++++ 2 files changed, 24 insertions(+) diff --git a/src/Symfony/Component/Validator/Mapping/ClassMetadata.php b/src/Symfony/Component/Validator/Mapping/ClassMetadata.php index 553d7806ad6a2..792d8e51409f3 100644 --- a/src/Symfony/Component/Validator/Mapping/ClassMetadata.php +++ b/src/Symfony/Component/Validator/Mapping/ClassMetadata.php @@ -298,6 +298,10 @@ public function hasMemberMetadatas($property) */ public function getMemberMetadatas($property) { + if (!isset($this->members[$property])) { + return array(); + } + return $this->members[$property]; } @@ -314,6 +318,10 @@ public function hasPropertyMetadata($property) */ public function getPropertyMetadata($property) { + if (!isset($this->members[$property])) { + return array(); + } + return $this->members[$property]; } diff --git a/src/Symfony/Component/Validator/Tests/Mapping/ClassMetadataTest.php b/src/Symfony/Component/Validator/Tests/Mapping/ClassMetadataTest.php index 9ead7d134eb60..08ae9600cea24 100644 --- a/src/Symfony/Component/Validator/Tests/Mapping/ClassMetadataTest.php +++ b/src/Symfony/Component/Validator/Tests/Mapping/ClassMetadataTest.php @@ -222,4 +222,20 @@ public function testGroupSequenceProvider() $metadata->setGroupSequenceProvider(true); $this->assertTrue($metadata->isGroupSequenceProvider()); } + + /** + * https://github.com/symfony/symfony/issues/11604 + */ + public function testGetMemberMetadatasReturnsEmptyArrayWithoutConfiguredMetadata() + { + $this->assertCount(0, $this->metadata->getMemberMetadatas('foo'), '->getMemberMetadatas() returns an empty collection if no metadata is configured for the given property'); + } + + /** + * https://github.com/symfony/symfony/issues/11604 + */ + public function testGetPropertyMetadataReturnsEmptyArrayWithoutConfiguredMetadata() + { + $this->assertCount(0, $this->metadata->getPropertyMetadata('foo'), '->getPropertyMetadata() returns an empty collection if no metadata is configured for the given property'); + } }