From a48df29b155cf1a148a9c68f7c6b50bb61087374 Mon Sep 17 00:00:00 2001 From: Olivier Dolbeau Date: Fri, 18 May 2012 11:50:50 +0200 Subject: [PATCH] constraint_validation option can now be an array --- .../DelegatingValidationListener.php | 25 +++++++++++++++---- .../DelegatingValidationListenerTest.php | 16 +++++++++++- 2 files changed, 35 insertions(+), 6 deletions(-) diff --git a/src/Symfony/Component/Form/Extension/Validator/EventListener/DelegatingValidationListener.php b/src/Symfony/Component/Form/Extension/Validator/EventListener/DelegatingValidationListener.php index 116b804b2478f..9e9b62d4803ac 100644 --- a/src/Symfony/Component/Form/Extension/Validator/EventListener/DelegatingValidationListener.php +++ b/src/Symfony/Component/Form/Extension/Validator/EventListener/DelegatingValidationListener.php @@ -22,6 +22,7 @@ use Symfony\Component\Validator\Constraint; use Symfony\Component\Validator\ValidatorInterface; use Symfony\Component\Validator\ExecutionContext; +use Symfony\Component\Validator\ConstraintViolationList; /** * @author Bernhard Schussek @@ -141,11 +142,25 @@ public function validateForm(DataEvent $event) // Validation of the data in the custom group is done by validateData(), // which is constrained by the Execute constraint if ($form->hasAttribute('validation_constraint')) { - $violations = $this->validator->validateValue( - $form->getData(), - $form->getAttribute('validation_constraint'), - self::getFormValidationGroups($form) - ); + if (is_array($form->getAttribute('validation_constraint'))) { + $violations = new ConstraintViolationList(); + foreach ($form->getAttribute('validation_constraint') as $constraint) { + $newViolations = $this->validator->validateValue( + $form->getData(), + $constraint, + self::getFormValidationGroups($form) + ); + if (null !== $newViolations) { + $violations->addAll($newViolations); + } + } + } else { + $violations = $this->validator->validateValue( + $form->getData(), + $form->getAttribute('validation_constraint'), + self::getFormValidationGroups($form) + ); + } if ($violations) { foreach ($violations as $violation) { diff --git a/src/Symfony/Component/Form/Tests/Extension/Validator/EventListener/DelegatingValidationListenerTest.php b/src/Symfony/Component/Form/Tests/Extension/Validator/EventListener/DelegatingValidationListenerTest.php index 187ce1a2b7bbe..a1b0be6619084 100644 --- a/src/Symfony/Component/Form/Tests/Extension/Validator/EventListener/DelegatingValidationListenerTest.php +++ b/src/Symfony/Component/Form/Tests/Extension/Validator/EventListener/DelegatingValidationListenerTest.php @@ -118,7 +118,7 @@ public function getValidationGroups(FormInterface $form) return array('group1', 'group2'); } - public function testUseValidateValueWhenValidationConstraintExist() + public function testUseValidateValueWhenValidationConstraintIsAValidConstraint() { $constraint = $this->getMockForAbstractClass('Symfony\Component\Validator\Constraint'); $form = $this @@ -131,6 +131,20 @@ public function testUseValidateValueWhenValidationConstraintExist() $this->listener->validateForm(new DataEvent($form, null)); } + public function testUseValidateValueWhenValidationConstraintIsAnArray() + { + $constraint1 = $this->getMockForAbstractClass('Symfony\Component\Validator\Constraint'); + $constraint2 = $this->getMockForAbstractClass('Symfony\Component\Validator\Constraint'); + $form = $this + ->getBuilder('name') + ->setAttribute('validation_constraint', array($constraint1, $constraint2)) + ->getForm(); + + $this->delegate->expects($this->exactly(2))->method('validateValue'); + + $this->listener->validateForm(new DataEvent($form, null)); + } + public function testFormErrorsOnForm() { $form = $this->getForm();