merged branch bschussek/issue4427 (PR #4431)

Commits
-------

fc38e2b [Form] Fixed mapping of violations with empty paths to the root form

Discussion
----------

[Form] Fixed mapping of violations with empty paths to the root form

Bug fix: yes
Feature addition: no
Backwards compatibility break: no
Symfony2 tests pass: yes
Fixes the following tickets: -
Todo: -

---------------------------------------------------------------------------

by travisbot at 2012-05-27T12:57:36Z

This pull request [passes](http://travis-ci.org/symfony/symfony/builds/1447769) (merged fc38e2b4 into adf07f1e).
This commit is contained in:
Fabien Potencier 2012-05-30 07:16:58 +02:00
commit c61c7400d2
2 changed files with 18 additions and 3 deletions

View File

@ -52,10 +52,22 @@ class ViolationMapper implements ViolationMapperInterface
{
$this->allowNonSynchronized = $allowNonSynchronized;
$violationPath = new ViolationPath($violation->getPropertyPath());
$relativePath = $this->reconstructPath($violationPath, $form);
$violationPath = null;
$relativePath = null;
$match = false;
// Don't create a ViolationPath instance for empty property paths
if (strlen($violation->getPropertyPath()) > 0) {
$violationPath = new ViolationPath($violation->getPropertyPath());
$relativePath = $this->reconstructPath($violationPath, $form);
}
// This case happens if the violation path is empty and thus
// the violation should be mapped to the root form
if (null === $violationPath) {
$this->scope = $form;
}
// In general, mapping happens from the root form to the leaf forms
// First, the rules of the root form are applied to determine
// the subsequent descendant. The rules of this descendant are then
@ -86,7 +98,7 @@ class ViolationMapper implements ViolationMapperInterface
// This case happens if an error happened in the data under a
// virtual form that does not match any of the children of
// the virtual form.
if (!$match) {
if (null !== $violationPath && !$match) {
// If we could not map the error to anything more specific
// than the root element, map it to the innermost directly
// mapped form of the violation path

View File

@ -221,6 +221,9 @@ class ViolationMapperTest extends \PHPUnit_Framework_TestCase
return array(
// mapping target, child name, its property path, grand child name, its property path, violation path
array(self::LEVEL_0, 'address', 'address', 'street', 'street', ''),
array(self::LEVEL_0, 'address', 'address', 'street', 'street', 'data'),
array(self::LEVEL_2, 'address', 'address', 'street', 'street', 'children[address].children[street].data'),
array(self::LEVEL_2, 'address', 'address', 'street', 'street', 'children[address].children[street].data.prop'),
array(self::LEVEL_2, 'address', 'address', 'street', 'street', 'children[address].data.street'),