bug #18761 [2.3] [Form] Modified iterator_to_array's 2nd parameter to false in ViolationMapper (issei-m)
This PR was squashed before being merged into the 2.3 branch (closes #18761).
Discussion
----------
[2.3] [Form] Modified iterator_to_array's 2nd parameter to false in ViolationMapper
| Q | A
| ------------- | ---
| Branch? | 2.3
| Bug fix? | yes
| New feature? | no
| BC breaks? | no
| Deprecations? | no
| Tests pass? | yes
| Fixed tickets | n/a
| License | MIT
| Doc PR | n/a
For https://github.com/symfony/symfony/pull/18747
Commits
-------
7101cab
[2.3] [Form] Modified iterator_to_array's 2nd parameter to false in ViolationMapper
This commit is contained in:
commit
f8f624b0d5
@ -161,9 +161,7 @@ class ViolationMapper implements ViolationMapperInterface
|
||||
}
|
||||
}
|
||||
|
||||
$children = iterator_to_array(new \RecursiveIteratorIterator(
|
||||
new InheritDataAwareIterator($form)
|
||||
));
|
||||
$children = iterator_to_array(new \RecursiveIteratorIterator(new InheritDataAwareIterator($form)), false);
|
||||
|
||||
while ($it->valid()) {
|
||||
if ($it->isIndex()) {
|
||||
@ -188,7 +186,7 @@ class ViolationMapper implements ViolationMapperInterface
|
||||
}
|
||||
|
||||
/** @var FormInterface $child */
|
||||
foreach ($children as $key => $child) {
|
||||
foreach ($children as $i => $child) {
|
||||
$childPath = (string) $child->getPropertyPath();
|
||||
if ($childPath === $chunk) {
|
||||
$target = $child;
|
||||
@ -197,7 +195,7 @@ class ViolationMapper implements ViolationMapperInterface
|
||||
continue;
|
||||
}
|
||||
|
||||
unset($children[$key]);
|
||||
unset($children[$i]);
|
||||
}
|
||||
|
||||
$it->next();
|
||||
|
@ -1477,22 +1477,39 @@ class ViolationMapperTest extends \PHPUnit_Framework_TestCase
|
||||
|
||||
public function testBacktrackIfSeveralSubFormsWithSamePropertyPath()
|
||||
{
|
||||
$violation = $this->getConstraintViolation('data.address[street]');
|
||||
$parent = $this->getForm('parent');
|
||||
$child1 = $this->getForm('subform1', 'address');
|
||||
$child2 = $this->getForm('subform2', 'address');
|
||||
$grandChild = $this->getForm('street');
|
||||
$child3 = $this->getForm('subform3', null, null, array(), true);
|
||||
$child4 = $this->getForm('subform4', null, null, array(), true);
|
||||
$grandChild1 = $this->getForm('street');
|
||||
$grandChild2 = $this->getForm('street', '[sub_address1_street]');
|
||||
$grandChild3 = $this->getForm('street', '[sub_address2_street]');
|
||||
|
||||
$parent->add($child1);
|
||||
$parent->add($child2);
|
||||
$child2->add($grandChild);
|
||||
$parent->add($child3);
|
||||
$parent->add($child4);
|
||||
$child2->add($grandChild1);
|
||||
$child3->add($grandChild2);
|
||||
$child4->add($grandChild3);
|
||||
|
||||
$this->mapper->mapViolation($violation, $parent);
|
||||
$parent->submit(array());
|
||||
|
||||
$violation1 = $this->getConstraintViolation('data.address[street]');
|
||||
$violation2 = $this->getConstraintViolation('data[sub_address1_street]');
|
||||
$violation3 = $this->getConstraintViolation('data[sub_address2_street]');
|
||||
$this->mapper->mapViolation($violation1, $parent);
|
||||
$this->mapper->mapViolation($violation2, $parent);
|
||||
$this->mapper->mapViolation($violation3, $parent);
|
||||
|
||||
// The error occurred on the child of the second form with the same path
|
||||
$this->assertCount(0, $parent->getErrors(), $parent->getName().' should not have an error, but has one');
|
||||
$this->assertCount(0, $child1->getErrors(), $child1->getName().' should not have an error, but has one');
|
||||
$this->assertCount(0, $child2->getErrors(), $child2->getName().' should not have an error, but has one');
|
||||
$this->assertEquals(array($this->getFormError()), $grandChild->getErrors(), $grandChild->getName().' should have an error, but has none');
|
||||
$this->assertCount(0, $child3->getErrors(), $child3->getName().' should not have an error, but has one');
|
||||
$this->assertCount(0, $child4->getErrors(), $child4->getName().' should not have an error, but has one');
|
||||
$this->assertEquals(array($this->getFormError($violation1, $grandChild1)), $grandChild1->getErrors(), $grandChild1->getName().' should have an error, but has none');
|
||||
$this->assertEquals(array($this->getFormError($violation2, $grandChild2)), $grandChild2->getErrors(), $grandChild2->getName().' should have an error, but has none');
|
||||
$this->assertEquals(array($this->getFormError($violation3, $grandChild3)), $grandChild3->getErrors(), $grandChild3->getName().' should have an error, but has none');
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user