From 58bf5822b2c73fe3b2dec3956fbb3e045a8d1d67 Mon Sep 17 00:00:00 2001 From: Dawid Sajdak Date: Mon, 26 Jan 2015 14:32:32 +0100 Subject: [PATCH] Unique Entity Validator Invalid Value --- .../Constraints/UniqueEntityValidatorTest.php | 31 +++++++++++++++++++ .../Constraints/UniqueEntityValidator.php | 3 +- 2 files changed, 33 insertions(+), 1 deletion(-) diff --git a/src/Symfony/Bridge/Doctrine/Tests/Validator/Constraints/UniqueEntityValidatorTest.php b/src/Symfony/Bridge/Doctrine/Tests/Validator/Constraints/UniqueEntityValidatorTest.php index 12a1e2c0b2..1565e6ffb4 100644 --- a/src/Symfony/Bridge/Doctrine/Tests/Validator/Constraints/UniqueEntityValidatorTest.php +++ b/src/Symfony/Bridge/Doctrine/Tests/Validator/Constraints/UniqueEntityValidatorTest.php @@ -238,6 +238,37 @@ class UniqueEntityValidatorTest extends AbstractConstraintValidatorTest ->assertRaised(); } + public function testValidateUniquenessWithValidCustomErrorPath() + { + $constraint = new UniqueEntity(array( + 'message' => 'myMessage', + 'fields' => array('name', 'name2'), + 'em' => self::EM_NAME, + 'errorPath' => "name2", + )); + + $entity1 = new DoubleNameEntity(1, 'Foo', "Bar"); + $entity2 = new DoubleNameEntity(2, 'Foo', "Bar"); + + $this->validator->validate($entity1, $constraint); + + $this->assertNoViolation(); + + $this->em->persist($entity1); + $this->em->flush(); + + $this->validator->validate($entity1, $constraint); + + $this->assertNoViolation(); + + $this->validator->validate($entity2, $constraint); + + $this->buildViolation('myMessage') + ->atPath('property.path.name2') + ->setInvalidValue('Bar') + ->assertRaised(); + } + public function testValidateUniquenessUsingCustomRepositoryMethod() { $constraint = new UniqueEntity(array( diff --git a/src/Symfony/Bridge/Doctrine/Validator/Constraints/UniqueEntityValidator.php b/src/Symfony/Bridge/Doctrine/Validator/Constraints/UniqueEntityValidator.php index e4bbcaff9b..4c6724a136 100644 --- a/src/Symfony/Bridge/Doctrine/Validator/Constraints/UniqueEntityValidator.php +++ b/src/Symfony/Bridge/Doctrine/Validator/Constraints/UniqueEntityValidator.php @@ -128,7 +128,8 @@ class UniqueEntityValidator extends ConstraintValidator } $errorPath = null !== $constraint->errorPath ? $constraint->errorPath : $fields[0]; + $invalidValue = isset($criteria[$errorPath]) ? $criteria[$errorPath] : $criteria[$fields[0]]; - $this->context->addViolationAt($errorPath, $constraint->message, array(), $criteria[$fields[0]]); + $this->context->addViolationAt($errorPath, $constraint->message, array(), $invalidValue); } }