[Form] Fixed arrays not to be passed to the validator
This commit is contained in:
parent
1c3e3f7744
commit
7c9c7af863
@ -736,16 +736,19 @@ class Form extends Field implements \IteratorAggregate, FormInterface
|
||||
throw new MissingOptionsException('The option "validator" is required for validating', array('validator'));
|
||||
}
|
||||
|
||||
// Validate the submitted data in the domain object in the sets
|
||||
// validation group(s)
|
||||
if ($violations = $validator->validate($this->getData(), $groups)) {
|
||||
foreach ($violations as $violation) {
|
||||
$propertyPath = new PropertyPath($violation->getPropertyPath());
|
||||
$iterator = $propertyPath->getIterator();
|
||||
$iterator->next(); // point at the first data element
|
||||
$error = new DataError($violation->getMessageTemplate(), $violation->getMessageParameters());
|
||||
// Only validate data if it is a domain object
|
||||
if (is_object($this->getData())) {
|
||||
// Validate the submitted data in the domain object in the sets
|
||||
// validation group(s)
|
||||
if ($violations = $validator->validate($this->getData(), $groups)) {
|
||||
foreach ($violations as $violation) {
|
||||
$propertyPath = new PropertyPath($violation->getPropertyPath());
|
||||
$iterator = $propertyPath->getIterator();
|
||||
$iterator->next(); // point at the first data element
|
||||
$error = new DataError($violation->getMessageTemplate(), $violation->getMessageParameters());
|
||||
|
||||
$this->addError($error, $iterator);
|
||||
$this->addError($error, $iterator);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -200,13 +200,13 @@ class FormTest extends \PHPUnit_Framework_TestCase
|
||||
|
||||
public function testBindUsesValidationGroups()
|
||||
{
|
||||
$field = $this->createMockField('firstName');
|
||||
$form = new Form('author', array(
|
||||
'validation_groups' => 'group',
|
||||
'validator' => $this->validator,
|
||||
));
|
||||
$form->add($field);
|
||||
$form->add(new TestField('firstName'));
|
||||
|
||||
// both the form and the object are validated
|
||||
$this->validator->expects($this->exactly(2))
|
||||
->method('validate');
|
||||
|
||||
@ -221,8 +221,26 @@ class FormTest extends \PHPUnit_Framework_TestCase
|
||||
// ->method('validate')
|
||||
// ->with($this->equalTo($form));
|
||||
|
||||
// data is irrelevant
|
||||
$form->bind($this->createPostRequest());
|
||||
// concrete request is irrelevant
|
||||
// data is an object
|
||||
$form->bind($this->createPostRequest(), new Author());
|
||||
}
|
||||
|
||||
public function testBindDoesNotValidateArrays()
|
||||
{
|
||||
$form = new Form('author', array(
|
||||
'validator' => $this->validator,
|
||||
));
|
||||
$form->add(new TestField('firstName'));
|
||||
|
||||
// only the form is validated
|
||||
$this->validator->expects($this->once())
|
||||
->method('validate')
|
||||
->with($this->equalTo($form));
|
||||
|
||||
// concrete request is irrelevant
|
||||
// data is an array
|
||||
$form->bind($this->createPostRequest(), array());
|
||||
}
|
||||
|
||||
public function testBindThrowsExceptionIfNoValidatorIsSet()
|
||||
|
Reference in New Issue
Block a user