[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();
|
||||
|
||||
if (!isset($this->validators[$className])) {
|
||||
if (!isset($this->validators[$className]) || $className === 'Symfony\Component\Validator\Constraints\CollectionValidator') {
|
||||
$this->validators[$className] = new $className();
|
||||
}
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
{
|
||||
|
|
Reference in New Issue