Skip to content

Commit

Permalink
[Form] Fixed mapping of violations with empty paths to the root form
Browse files Browse the repository at this point in the history
  • Loading branch information
webmozart committed May 27, 2012
1 parent adf07f1 commit fc38e2b
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 3 deletions.
Expand Up @@ -52,10 +52,22 @@ public function mapViolation(ConstraintViolation $violation, FormInterface $form
{
$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
Expand Down Expand Up @@ -86,7 +98,7 @@ public function mapViolation(ConstraintViolation $violation, FormInterface $form
// 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
Expand Down
Expand Up @@ -221,6 +221,9 @@ public function provideDefaultTests()

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'),
Expand Down

0 comments on commit fc38e2b

Please sign in to comment.