feature #8133 [Form] Add allow_extra_fields option on forms (felds)

This PR was merged into the 2.5-dev branch.

Discussion
----------

[Form] Add allow_extra_fields option on forms

This is specially useful when creating different *nameless* GET forms on the same page (ex: pagination and search).

Commits
-------

c6f3dd6 add allow_extra_fields option
This commit is contained in:
Fabien Potencier 2014-06-13 13:04:41 +02:00
commit 9e3e89ae33
3 changed files with 24 additions and 1 deletions

View File

@ -111,7 +111,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

@ -65,6 +65,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

@ -611,6 +611,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
*/ */