From e6dc155e89f8273263d7df06e00e367423b821cc Mon Sep 17 00:00:00 2001 From: Thomas Date: Wed, 2 Feb 2011 11:10:42 +0100 Subject: [PATCH] fix validator class metadata warning --- .../FieldFactory/ValidatorFieldFactoryGuesser.php | 15 +++++++++------ .../Component/Validator/Mapping/ClassMetadata.php | 12 ++++++++++++ .../Validator/Mapping/ClassMetadataTest.php | 8 ++++++++ 3 files changed, 29 insertions(+), 6 deletions(-) diff --git a/src/Symfony/Component/Form/FieldFactory/ValidatorFieldFactoryGuesser.php b/src/Symfony/Component/Form/FieldFactory/ValidatorFieldFactoryGuesser.php index 8af07d0d23a8..b4964cf52bdf 100644 --- a/src/Symfony/Component/Form/FieldFactory/ValidatorFieldFactoryGuesser.php +++ b/src/Symfony/Component/Form/FieldFactory/ValidatorFieldFactoryGuesser.php @@ -81,14 +81,17 @@ protected function guess($class, $property, \Closure $guessForConstraint) { $guesses = array(); $classMetadata = $this->metadataFactory->getClassMetadata($class); - $memberMetadatas = $classMetadata->getMemberMetadatas($property); - foreach ($memberMetadatas as $memberMetadata) { - $constraints = $memberMetadata->getConstraints(); + if ($classMetadata->hasMemberMetadatas($property)) { + $memberMetadatas = $classMetadata->getMemberMetadatas($property); - foreach ($constraints as $constraint) { - if ($guess = $guessForConstraint($constraint)) { - $guesses[] = $guess; + foreach ($memberMetadatas as $memberMetadata) { + $constraints = $memberMetadata->getConstraints(); + + foreach ($constraints as $constraint) { + if ($guess = $guessForConstraint($constraint)) { + $guesses[] = $guess; + } } } } diff --git a/src/Symfony/Component/Validator/Mapping/ClassMetadata.php b/src/Symfony/Component/Validator/Mapping/ClassMetadata.php index f9d83ff8a412..18a86e025476 100644 --- a/src/Symfony/Component/Validator/Mapping/ClassMetadata.php +++ b/src/Symfony/Component/Validator/Mapping/ClassMetadata.php @@ -207,6 +207,18 @@ protected function addMemberMetadata(MemberMetadata $metadata) $this->members[$property][] = $metadata; } + /** + * Returns true if metadatas of members is present for the given property. + * + * @param string $property The name of the property + * + * @return Boolean + */ + public function hasMemberMetadatas($property) + { + return array_key_exists($property, $this->members); + } + /** * Returns all metadatas of members describing the given property * diff --git a/tests/Symfony/Tests/Component/Validator/Mapping/ClassMetadataTest.php b/tests/Symfony/Tests/Component/Validator/Mapping/ClassMetadataTest.php index e60c5e326547..14c54729aba3 100644 --- a/tests/Symfony/Tests/Component/Validator/Mapping/ClassMetadataTest.php +++ b/tests/Symfony/Tests/Component/Validator/Mapping/ClassMetadataTest.php @@ -109,6 +109,14 @@ public function testMergeConstraintsMergesMemberConstraints() $this->assertEquals($constraints, $members[0]->getConstraints()); } + public function testMemberMetadatas() + { + $this->metadata->addPropertyConstraint('firstName', new ConstraintA()); + + $this->assertTrue($this->metadata->hasMemberMetadatas('firstName')); + $this->assertFalse($this->metadata->hasMemberMetadatas('non_existant_field')); + } + public function testMergeConstraintsKeepsPrivateMembersSeperate() { $parent = new ClassMetadata(self::PARENTCLASS);