Bläddra i källkod

[Form] added missing DelegatingValidator registration in the Form Extension class (used when using the Form component outside a Symfony2 project where the validation.xml is used instead)

Fabien Potencier 13 år sedan
förälder
incheckning
2b1bb2c357

+ 6 - 0
src/Symfony/Component/Form/Extension/Validator/ValidatorExtension.php

@@ -14,6 +14,8 @@ namespace Symfony\Component\Form\Extension\Validator;
 use Symfony\Component\Form\Extension\Validator\Type;
 use Symfony\Component\Form\AbstractExtension;
 use Symfony\Component\Validator\ValidatorInterface;
+use Symfony\Component\Validator\Constraints\Callback;
+use Symfony\Component\Validator\Constraints\Valid;
 
 class ValidatorExtension extends AbstractExtension
 {
@@ -22,6 +24,10 @@ class ValidatorExtension extends AbstractExtension
     public function __construct(ValidatorInterface $validator)
     {
         $this->validator = $validator;
+
+        $metadata = $this->validator->getMetadataFactory()->getClassMetadata('Symfony\Component\Form\Form');
+        $metadata->addConstraint(new Callback(array(array('Symfony\Component\Form\Extension\Validator\Validator\DelegatingValidator', 'validateFormData'))));
+        $metadata->addPropertyConstraint('children', new Valid());
     }
 
     public function loadTypeGuesser()

+ 4 - 0
tests/Symfony/Tests/Component/Form/Extension/Validator/Type/TypeTestCase.php

@@ -21,6 +21,10 @@ abstract class TypeTestCase extends BaseTestCase
     protected function setUp()
     {
         $this->validator = $this->getMock('Symfony\Component\Validator\ValidatorInterface');
+        $metadataFactory = $this->getMock('Symfony\Component\Validator\Mapping\ClassMetadataFactoryInterface');
+        $this->validator->expects($this->once())->method('getMetadataFactory')->will($this->returnValue($metadataFactory));
+        $metadata = $this->getMockBuilder('Symfony\Component\Validator\Mapping\ClassMetadata')->disableOriginalConstructor()->getMock();
+        $metadataFactory->expects($this->once())->method('getClassMetadata')->will($this->returnValue($metadata));
 
         parent::setUp();
     }