From 1a34743990c464b0d73d8b6aecf1d4da0145a332 Mon Sep 17 00:00:00 2001 From: Bernhard Schussek Date: Thu, 3 Feb 2011 13:21:37 +0100 Subject: [PATCH] [Validator] Fixed: Collections annotated with @Valid may contain scalar values. These values are ignored by the GraphWalker --- .../Component/Validator/GraphWalker.php | 5 ++++- .../Component/Validator/GraphWalkerTest.php | 18 ++++++++++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/src/Symfony/Component/Validator/GraphWalker.php b/src/Symfony/Component/Validator/GraphWalker.php index 221a0bc2ae..c887fdc7a0 100644 --- a/src/Symfony/Component/Validator/GraphWalker.php +++ b/src/Symfony/Component/Validator/GraphWalker.php @@ -142,7 +142,10 @@ class GraphWalker if ($traverse && (is_array($value) || $value instanceof \Traversable)) { foreach ($value as $key => $element) { - $this->walkReference($element, $group, $propertyPath.'['.$key.']', $traverse); + // Ignore any scalar values in the collection + if (is_object($element) || is_array($element)) { + $this->walkReference($element, $group, $propertyPath.'['.$key.']', $traverse); + } } } diff --git a/tests/Symfony/Tests/Component/Validator/GraphWalkerTest.php b/tests/Symfony/Tests/Component/Validator/GraphWalkerTest.php index 2f5a8ae4ce..3703d6a05a 100644 --- a/tests/Symfony/Tests/Component/Validator/GraphWalkerTest.php +++ b/tests/Symfony/Tests/Component/Validator/GraphWalkerTest.php @@ -330,6 +330,24 @@ class GraphWalkerTest extends \PHPUnit_Framework_TestCase $this->assertEquals($violations, $this->walker->getViolations()); } + public function testWalkCascadedPropertyDoesNotValidateNestedScalarValues() + { + // validate array when validating the property "reference" + $this->metadata->addPropertyConstraint('reference', new Valid()); + + $this->walker->walkPropertyValue( + $this->metadata, + 'reference', + array('scalar', 'values'), + 'Default', + 'path' + ); + + $violations = new ConstraintViolationList(); + + $this->assertEquals($violations, $this->walker->getViolations()); + } + public function testWalkCascadedPropertyDoesNotValidateNullValues() { $this->metadata->addPropertyConstraint('reference', new Valid());