add allow_extra_fields option

This commit is contained in:
Felds Liscia 2013-05-24 14:02:19 -03:00
parent 430c6d7485
commit c6f3dd6a85
3 changed files with 24 additions and 1 deletions

View File

@ -107,7 +107,7 @@ class FormValidator extends ConstraintValidator
} }
// Mark the form with an error if it contains extra fields // Mark the form with an error if it contains extra fields
if (count($form->getExtraData()) > 0) { if (!$config->getOption('allow_extra_fields') && count($form->getExtraData()) > 0) {
$this->context->addViolation( $this->context->addViolation(
$config->getOption('extra_fields_message'), $config->getOption('extra_fields_message'),
array('{{ extra_fields }}' => implode('", "', array_keys($form->getExtraData()))), array('{{ extra_fields }}' => implode('", "', array_keys($form->getExtraData()))),

View File

@ -67,6 +67,7 @@ class FormTypeValidatorExtension extends BaseValidatorExtension
'cascade_validation' => false, 'cascade_validation' => false,
'invalid_message' => 'This value is not valid.', 'invalid_message' => 'This value is not valid.',
'invalid_message_parameters' => array(), 'invalid_message_parameters' => array(),
'allow_extra_fields' => false,
'extra_fields_message' => 'This form should not contain extra fields.', '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.', 'post_max_size_message' => 'The uploaded file was too large. Please try to upload a smaller file.',
)); ));

View File

@ -615,6 +615,28 @@ class FormValidatorTest extends \PHPUnit_Framework_TestCase
$this->validator->validate($form, new Form()); $this->validator->validate($form, new Form());
} }
public function testNoViolationIfAllowExtraData()
{
$context = $this->getMockExecutionContext();
$form = $this
->getBuilder('parent', null, array('allow_extra_fields' => true))
->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 * @dataProvider getPostMaxSizeFixtures
*/ */