diff --git a/src/Symfony/Component/Validator/Constraints/ValidValidator.php b/src/Symfony/Component/Validator/Constraints/ValidValidator.php index 45ac69d91d..b2f1f1c5a0 100644 --- a/src/Symfony/Component/Validator/Constraints/ValidValidator.php +++ b/src/Symfony/Component/Validator/Constraints/ValidValidator.php @@ -26,12 +26,9 @@ class ValidValidator extends ConstraintValidator throw new UnexpectedTypeException($constraint, __NAMESPACE__.'\Valid'); } - $violations = $this->context->getValidator()->validate($value, null, array($this->context->getGroup())); - - foreach ($violations as $violation) { - $this->context->buildViolation($violation->getMessage(), $violation->getParameters()) - ->atPath($violation->getPropertyPath()) - ->addViolation(); - } + $this->context + ->getValidator() + ->inContext($this->context) + ->validate($value, null, array($this->context->getGroup())); } } diff --git a/src/Symfony/Component/Validator/Tests/Constraints/ValidValidatorTest.php b/src/Symfony/Component/Validator/Tests/Constraints/ValidValidatorTest.php new file mode 100644 index 0000000000..f95650d359 --- /dev/null +++ b/src/Symfony/Component/Validator/Tests/Constraints/ValidValidatorTest.php @@ -0,0 +1,61 @@ +enableAnnotationMapping()->getValidator(); + + $violations = $validator->validate(new Foo(), null, array('nested')); + + $this->assertCount(1, $violations); + $this->assertSame('fooBar.fooBarBaz.foo', $violations->get(0)->getPropertyPath()); + } + + protected function createValidator() + { + return new ValidValidator(); + } +} + +class Foo +{ + /** + * @Assert\Valid(groups={"nested"}) + */ + public $fooBar; + + public function __construct() + { + $this->fooBar = new FooBar(); + } +} + +class FooBar +{ + /** + * @Assert\Valid(groups={"nested"}) + */ + public $fooBarBaz; + + public function __construct() + { + $this->fooBarBaz = new FooBarBaz(); + } +} + +class FooBarBaz +{ + /** + * @Assert\NotBlank(groups={"nested"}) + */ + public $foo; +}