[Validator] fixed ConstraintViolation:: incorrect when nested

This commit is contained in:
Venu 2013-07-04 22:44:23 +05:30 committed by Fabien Potencier
parent 6dbd1e102b
commit 28e070974a
3 changed files with 38 additions and 1 deletions

View File

@ -32,7 +32,7 @@ class ConstraintValidatorFactory implements ConstraintValidatorFactoryInterface
{
$className = $constraint->validatedBy();
if (!isset($this->validators[$className])) {
if (!isset($this->validators[$className]) || $className === 'Symfony\Component\Validator\Constraints\CollectionValidator') {
$this->validators[$className] = new $className();
}

View File

@ -16,6 +16,10 @@ use Symfony\Component\Validator\Mapping\ClassMetadata;
use Symfony\Component\Validator\ConstraintViolation;
use Symfony\Component\Validator\ConstraintViolationList;
use Symfony\Component\Validator\ExecutionContext;
use Symfony\Component\Validator\Constraints\Collection;
use Symfony\Component\Validator\Tests\Fixtures\ConstraintA;
use Symfony\Component\Validator\ValidationVisitor;
use Symfony\Component\Validator\ConstraintValidatorFactory;
class ExecutionContextTest extends \PHPUnit_Framework_TestCase
{
@ -410,6 +414,24 @@ class ExecutionContextTest extends \PHPUnit_Framework_TestCase
$this->assertEquals('bam.baz', $this->context->getPropertyPath('bam.baz'));
}
public function testGetPropertyPathWithNestedCollectionsMixed()
{
$constraints = new Collection(array(
'foo' => new Collection(array(
'foo' => new ConstraintA(),
'bar' => new ConstraintA(),
)),
'name' => new ConstraintA()
));
$visitor = new ValidationVisitor('Root', $this->metadataFactory, new ConstraintValidatorFactory(), $this->translator);
$context = new ExecutionContext($visitor, $this->translator, self::TRANS_DOMAIN);
$context->validateValue(array('foo' => array('foo' => 'VALID')), $constraints);
$violations = $context->getViolations();
$this->assertEquals('[name]', $violations[1]->getPropertyPath());
}
}
class ExecutionContextTest_TestClass

View File

@ -581,6 +581,21 @@ class GraphWalkerTest extends \PHPUnit_Framework_TestCase
$violations = $this->walker->getViolations();
$this->assertEquals('collection[foo][bar]', $violations[0]->getPropertyPath());
}
public function testWalkObjectUsesCorrectPropertyPathInViolationsWhenUsingNestedMixedCollections()
{
$constraint = new Collection(array(
'foo' => new Collection(array(
'foo' => new ConstraintA(),
'bar' => new ConstraintA(),
)),
'name' => new ConstraintA()
));
$this->walker->walkConstraint($constraint, array('foo' => array('foo' => 'VALID')), 'Default', 'collection');
$violations = $this->walker->getViolations();
$this->assertEquals('collection[name]', $violations[1]->getPropertyPath());
}
protected function getProperty($property)
{