[2.3] [Form] Modified iterator_to_array's 2nd parameter to false in ViolationMapper
This commit is contained in:
parent
4533220997
commit
7101cab29f
@ -161,9 +161,7 @@ class ViolationMapper implements ViolationMapperInterface
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$children = iterator_to_array(new \RecursiveIteratorIterator(
|
$children = iterator_to_array(new \RecursiveIteratorIterator(new InheritDataAwareIterator($form)), false);
|
||||||
new InheritDataAwareIterator($form)
|
|
||||||
));
|
|
||||||
|
|
||||||
while ($it->valid()) {
|
while ($it->valid()) {
|
||||||
if ($it->isIndex()) {
|
if ($it->isIndex()) {
|
||||||
@ -188,7 +186,7 @@ class ViolationMapper implements ViolationMapperInterface
|
|||||||
}
|
}
|
||||||
|
|
||||||
/** @var FormInterface $child */
|
/** @var FormInterface $child */
|
||||||
foreach ($children as $key => $child) {
|
foreach ($children as $i => $child) {
|
||||||
$childPath = (string) $child->getPropertyPath();
|
$childPath = (string) $child->getPropertyPath();
|
||||||
if ($childPath === $chunk) {
|
if ($childPath === $chunk) {
|
||||||
$target = $child;
|
$target = $child;
|
||||||
@ -197,7 +195,7 @@ class ViolationMapper implements ViolationMapperInterface
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
unset($children[$key]);
|
unset($children[$i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
$it->next();
|
$it->next();
|
||||||
|
@ -1477,22 +1477,39 @@ class ViolationMapperTest extends \PHPUnit_Framework_TestCase
|
|||||||
|
|
||||||
public function testBacktrackIfSeveralSubFormsWithSamePropertyPath()
|
public function testBacktrackIfSeveralSubFormsWithSamePropertyPath()
|
||||||
{
|
{
|
||||||
$violation = $this->getConstraintViolation('data.address[street]');
|
|
||||||
$parent = $this->getForm('parent');
|
$parent = $this->getForm('parent');
|
||||||
$child1 = $this->getForm('subform1', 'address');
|
$child1 = $this->getForm('subform1', 'address');
|
||||||
$child2 = $this->getForm('subform2', '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($child1);
|
||||||
$parent->add($child2);
|
$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, $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, $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->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