[Form][Validator] All index items after children are to be considered grand-children when resolving ViolationPath (fixes #11458)
This commit is contained in:
parent
4dbe0e1c34
commit
c64a75f7bb
@ -70,9 +70,17 @@ class ViolationPath implements \IteratorAggregate, PropertyPathInterface
|
||||
break;
|
||||
}
|
||||
|
||||
$this->elements[] = $elements[$i];
|
||||
$this->isIndex[] = true;
|
||||
$this->mapsForm[] = true;
|
||||
// All the following index items (regardless if .children is
|
||||
// explicitly used) are children and grand-children
|
||||
for (; $i < $l && $path->isIndex($i); ++$i) {
|
||||
$this->elements[] = $elements[$i];
|
||||
$this->isIndex[] = true;
|
||||
$this->mapsForm[] = true;
|
||||
}
|
||||
|
||||
// Rewind the pointer as the last element above didn't match
|
||||
// (even if the pointer was moved forward)
|
||||
--$i;
|
||||
} elseif ('data' === $elements[$i] && $path->isProperty($i)) {
|
||||
// Skip element "data"
|
||||
++$i;
|
||||
|
@ -712,14 +712,14 @@ class ViolationMapperTest extends \PHPUnit_Framework_TestCase
|
||||
array(self::LEVEL_2, 'address', '[address]', 'street', '[office][street]', 'data[address][office][street].prop'),
|
||||
|
||||
// Edge cases which must not occur
|
||||
array(self::LEVEL_1, 'address', 'address', 'street', 'street', 'children[address][street]'),
|
||||
array(self::LEVEL_1, 'address', 'address', 'street', 'street', 'children[address][street].prop'),
|
||||
array(self::LEVEL_1, 'address', 'address', 'street', '[street]', 'children[address][street]'),
|
||||
array(self::LEVEL_1, 'address', 'address', 'street', '[street]', 'children[address][street].prop'),
|
||||
array(self::LEVEL_1, 'address', '[address]', 'street', 'street', 'children[address][street]'),
|
||||
array(self::LEVEL_1, 'address', '[address]', 'street', 'street', 'children[address][street].prop'),
|
||||
array(self::LEVEL_1, 'address', '[address]', 'street', '[street]', 'children[address][street]'),
|
||||
array(self::LEVEL_1, 'address', '[address]', 'street', '[street]', 'children[address][street].prop'),
|
||||
array(self::LEVEL_2, 'address', 'address', 'street', 'street', 'children[address][street]'),
|
||||
array(self::LEVEL_2, 'address', 'address', 'street', 'street', 'children[address][street].prop'),
|
||||
array(self::LEVEL_2, 'address', 'address', 'street', '[street]', 'children[address][street]'),
|
||||
array(self::LEVEL_2, 'address', 'address', 'street', '[street]', 'children[address][street].prop'),
|
||||
array(self::LEVEL_2, 'address', '[address]', 'street', 'street', 'children[address][street]'),
|
||||
array(self::LEVEL_2, 'address', '[address]', 'street', 'street', 'children[address][street].prop'),
|
||||
array(self::LEVEL_2, 'address', '[address]', 'street', '[street]', 'children[address][street]'),
|
||||
array(self::LEVEL_2, 'address', '[address]', 'street', '[street]', 'children[address][street].prop'),
|
||||
|
||||
array(self::LEVEL_0, 'address', 'person.address', 'street', 'street', 'children[person].children[address].children[street]'),
|
||||
array(self::LEVEL_0, 'address', 'person.address', 'street', 'street', 'children[person].children[address].data.street'),
|
||||
|
@ -30,7 +30,8 @@ class ViolationPathTest extends \PHPUnit_Framework_TestCase
|
||||
)),
|
||||
array('children[address][street]', array(
|
||||
array('address', true, true),
|
||||
), 'children[address]'),
|
||||
array('street', true, true),
|
||||
), 'children[address].children[street]'),
|
||||
array('children[address].data', array(
|
||||
array('address', true, true),
|
||||
), 'children[address]'),
|
||||
|
Reference in New Issue
Block a user