From 2e1ab88b00c552c3d29647f49976822458ceddf4 Mon Sep 17 00:00:00 2001 From: Marcos Passos Date: Fri, 1 Mar 2013 07:44:53 -0300 Subject: [PATCH 1/2] - Add ignore_extra_data option --- .../Validator/Constraints/FormValidator.php | 4 ++-- .../Type/FormTypeValidatorExtension.php | 1 + .../Constraints/FormValidatorTest.php | 21 +++++++++++++++++++ 3 files changed, 24 insertions(+), 2 deletions(-) diff --git a/src/Symfony/Component/Form/Extension/Validator/Constraints/FormValidator.php b/src/Symfony/Component/Form/Extension/Validator/Constraints/FormValidator.php index 167fcd95e9755..1fc6a2be6506b 100644 --- a/src/Symfony/Component/Form/Extension/Validator/Constraints/FormValidator.php +++ b/src/Symfony/Component/Form/Extension/Validator/Constraints/FormValidator.php @@ -105,8 +105,8 @@ public function validate($form, Constraint $constraint) } } - // Mark the form with an error if it contains extra fields - if (count($form->getExtraData()) > 0) { + // Mark the form with an error if it contains not allowed extra fields + if (!$config->getOption('ignore_extra_data') && count($form->getExtraData()) > 0) { $this->context->addViolation( $config->getOption('extra_fields_message'), array('{{ extra_fields }}' => implode('", "', array_keys($form->getExtraData()))), diff --git a/src/Symfony/Component/Form/Extension/Validator/Type/FormTypeValidatorExtension.php b/src/Symfony/Component/Form/Extension/Validator/Type/FormTypeValidatorExtension.php index fe55ed79710dc..bce5697823e04 100644 --- a/src/Symfony/Component/Form/Extension/Validator/Type/FormTypeValidatorExtension.php +++ b/src/Symfony/Component/Form/Extension/Validator/Type/FormTypeValidatorExtension.php @@ -85,6 +85,7 @@ public function setDefaultOptions(OptionsResolverInterface $resolver) 'cascade_validation' => false, 'invalid_message' => 'This value is not valid.', 'invalid_message_parameters' => array(), + 'ignore_extra_data' => false, 'extra_fields_message' => 'This form should not contain extra fields.', 'post_max_size_message' => 'The uploaded file was too large. Please try to upload a smaller file.', )); diff --git a/src/Symfony/Component/Form/Tests/Extension/Validator/Constraints/FormValidatorTest.php b/src/Symfony/Component/Form/Tests/Extension/Validator/Constraints/FormValidatorTest.php index a3d9f26d98617..3f26680c708bd 100644 --- a/src/Symfony/Component/Form/Tests/Extension/Validator/Constraints/FormValidatorTest.php +++ b/src/Symfony/Component/Form/Tests/Extension/Validator/Constraints/FormValidatorTest.php @@ -456,6 +456,27 @@ public function testViolationIfExtraData() $this->validator->validate($form, new Form()); } + public function testDontMarkInvalidIfExtraDataIsIgnored() + { + $context = $this->getMockExecutionContext(); + + $form = $this->getBuilder('parent', null, array('ignore_extra_data' => false)) + ->setCompound(true) + ->setDataMapper($this->getDataMapper()) + ->add($this->getBuilder('child')) + ->getForm(); + + $form->bind(array('foo' => 'bar')); + + $context->expects($this->never()) + ->method('addViolation'); + $context->expects($this->never()) + ->method('addViolationAt'); + + $this->validator->initialize($context); + $this->validator->validate($form, new Form()); + } + /** * @dataProvider getPostMaxSizeFixtures */ From dd5109487ad5738bb155321465b8989334fcd654 Mon Sep 17 00:00:00 2001 From: Marcos Passos Date: Fri, 1 Mar 2013 15:07:34 -0300 Subject: [PATCH 2/2] - Rename `ignore_extra_data` option to `forbid_extra_data` - Fix tests --- .../Extension/Validator/Constraints/FormValidator.php | 2 +- .../Validator/Type/FormTypeValidatorExtension.php | 2 +- .../Validator/Constraints/FormValidatorTest.php | 10 +++++++--- 3 files changed, 9 insertions(+), 5 deletions(-) diff --git a/src/Symfony/Component/Form/Extension/Validator/Constraints/FormValidator.php b/src/Symfony/Component/Form/Extension/Validator/Constraints/FormValidator.php index 1fc6a2be6506b..e6b0d3e06024d 100644 --- a/src/Symfony/Component/Form/Extension/Validator/Constraints/FormValidator.php +++ b/src/Symfony/Component/Form/Extension/Validator/Constraints/FormValidator.php @@ -106,7 +106,7 @@ public function validate($form, Constraint $constraint) } // Mark the form with an error if it contains not allowed extra fields - if (!$config->getOption('ignore_extra_data') && count($form->getExtraData()) > 0) { + if ($config->getOption('forbid_extra_data') && count($form->getExtraData()) > 0) { $this->context->addViolation( $config->getOption('extra_fields_message'), array('{{ extra_fields }}' => implode('", "', array_keys($form->getExtraData()))), diff --git a/src/Symfony/Component/Form/Extension/Validator/Type/FormTypeValidatorExtension.php b/src/Symfony/Component/Form/Extension/Validator/Type/FormTypeValidatorExtension.php index bce5697823e04..ef9bfabd46805 100644 --- a/src/Symfony/Component/Form/Extension/Validator/Type/FormTypeValidatorExtension.php +++ b/src/Symfony/Component/Form/Extension/Validator/Type/FormTypeValidatorExtension.php @@ -85,7 +85,7 @@ public function setDefaultOptions(OptionsResolverInterface $resolver) 'cascade_validation' => false, 'invalid_message' => 'This value is not valid.', 'invalid_message_parameters' => array(), - 'ignore_extra_data' => false, + 'forbid_extra_data' => true, 'extra_fields_message' => 'This form should not contain extra fields.', 'post_max_size_message' => 'The uploaded file was too large. Please try to upload a smaller file.', )); diff --git a/src/Symfony/Component/Form/Tests/Extension/Validator/Constraints/FormValidatorTest.php b/src/Symfony/Component/Form/Tests/Extension/Validator/Constraints/FormValidatorTest.php index 3f26680c708bd..d0e49ee197a43 100644 --- a/src/Symfony/Component/Form/Tests/Extension/Validator/Constraints/FormValidatorTest.php +++ b/src/Symfony/Component/Form/Tests/Extension/Validator/Constraints/FormValidatorTest.php @@ -433,8 +433,12 @@ public function testDontWalkScalars() public function testViolationIfExtraData() { $context = $this->getMockExecutionContext(); + $options = array( + 'extra_fields_message' => 'Extra!', + 'forbid_extra_data' => true, + ); - $form = $this->getBuilder('parent', null, array('extra_fields_message' => 'Extra!')) + $form = $this->getBuilder('parent', null, $options) ->setCompound(true) ->setDataMapper($this->getDataMapper()) ->add($this->getBuilder('child')) @@ -456,11 +460,11 @@ public function testViolationIfExtraData() $this->validator->validate($form, new Form()); } - public function testDontMarkInvalidIfExtraDataIsIgnored() + public function testDontMarkInvalidIfNotForbidExtraData() { $context = $this->getMockExecutionContext(); - $form = $this->getBuilder('parent', null, array('ignore_extra_data' => false)) + $form = $this->getBuilder('parent', null, array('forbid_extra_data' => false)) ->setCompound(true) ->setDataMapper($this->getDataMapper()) ->add($this->getBuilder('child'))