[Validator] fixed ConstraintViolation:: incorrect when nested
This commit is contained in:
parent
6dbd1e102b
commit
28e070974a
|
@ -32,7 +32,7 @@ class ConstraintValidatorFactory implements ConstraintValidatorFactoryInterface
|
||||||
{
|
{
|
||||||
$className = $constraint->validatedBy();
|
$className = $constraint->validatedBy();
|
||||||
|
|
||||||
if (!isset($this->validators[$className])) {
|
if (!isset($this->validators[$className]) || $className === 'Symfony\Component\Validator\Constraints\CollectionValidator') {
|
||||||
$this->validators[$className] = new $className();
|
$this->validators[$className] = new $className();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -16,6 +16,10 @@ use Symfony\Component\Validator\Mapping\ClassMetadata;
|
||||||
use Symfony\Component\Validator\ConstraintViolation;
|
use Symfony\Component\Validator\ConstraintViolation;
|
||||||
use Symfony\Component\Validator\ConstraintViolationList;
|
use Symfony\Component\Validator\ConstraintViolationList;
|
||||||
use Symfony\Component\Validator\ExecutionContext;
|
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
|
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'));
|
$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
|
class ExecutionContextTest_TestClass
|
||||||
|
|
|
@ -581,6 +581,21 @@ class GraphWalkerTest extends \PHPUnit_Framework_TestCase
|
||||||
$violations = $this->walker->getViolations();
|
$violations = $this->walker->getViolations();
|
||||||
$this->assertEquals('collection[foo][bar]', $violations[0]->getPropertyPath());
|
$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)
|
protected function getProperty($property)
|
||||||
{
|
{
|
||||||
|
|
Reference in New Issue