From c1ea6e457881f0d77cdadae2b2c37ea361eb7a1e Mon Sep 17 00:00:00 2001 From: Jamal Youssefi Date: Tue, 24 Feb 2015 16:14:26 +0100 Subject: [PATCH 01/10] display custom message for uniqueEntity constraint --- .../Validator/Constraints/UniqueEntityValidator.php | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/Symfony/Bridge/Doctrine/Validator/Constraints/UniqueEntityValidator.php b/src/Symfony/Bridge/Doctrine/Validator/Constraints/UniqueEntityValidator.php index 9aaf329abc186..76f78b9dc2eba 100644 --- a/src/Symfony/Bridge/Doctrine/Validator/Constraints/UniqueEntityValidator.php +++ b/src/Symfony/Bridge/Doctrine/Validator/Constraints/UniqueEntityValidator.php @@ -16,6 +16,7 @@ use Symfony\Component\Validator\Exception\UnexpectedTypeException; use Symfony\Component\Validator\Exception\ConstraintDefinitionException; use Symfony\Component\Validator\ConstraintValidator; +use Symfony\Component\PropertyAccess\PropertyAccess; /** * Unique Entity Validator checks if one or a set of fields contain unique values. @@ -134,6 +135,18 @@ public function validate($entity, Constraint $constraint) $errorPath = null !== $constraint->errorPath ? $constraint->errorPath : $fields[0]; $invalidValue = isset($criteria[$errorPath]) ? $criteria[$errorPath] : $criteria[$fields[0]]; + $vars = array(); + + if (preg_match_all('/{{ ([a-zA-Z0-9_]+) }}/i', $constraint->message, $vars) > 0) + { + $accessor = PropertyAccess::createPropertyAccessor(); + + foreach($vars[1] as $var) + { + $constraint->message = str_replace(sprintf("{{ %s }}", $var), $accessor->getValue($entity, $var), $constraint->message); + } + } + $this->buildViolation($constraint->message) ->atPath($errorPath) ->setInvalidValue($invalidValue) From f5a7ba6e12821d5cb3dd1916dfbd4a0a9a5847fa Mon Sep 17 00:00:00 2001 From: Jamal Youssefi Date: Wed, 25 Feb 2015 09:56:06 +0100 Subject: [PATCH 02/10] fix forgot code convention --- .../Validator/Constraints/UniqueEntityValidator.php | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/Symfony/Bridge/Doctrine/Validator/Constraints/UniqueEntityValidator.php b/src/Symfony/Bridge/Doctrine/Validator/Constraints/UniqueEntityValidator.php index 76f78b9dc2eba..4997d05ba3420 100644 --- a/src/Symfony/Bridge/Doctrine/Validator/Constraints/UniqueEntityValidator.php +++ b/src/Symfony/Bridge/Doctrine/Validator/Constraints/UniqueEntityValidator.php @@ -137,12 +137,11 @@ public function validate($entity, Constraint $constraint) $vars = array(); - if (preg_match_all('/{{ ([a-zA-Z0-9_]+) }}/i', $constraint->message, $vars) > 0) - { + if (preg_match_all('/{{ ([a-zA-Z0-9_]+) }}/i', $constraint->message, $vars) > 0) { + $accessor = PropertyAccess::createPropertyAccessor(); - foreach($vars[1] as $var) - { + foreach($vars[1] as $var) { $constraint->message = str_replace(sprintf("{{ %s }}", $var), $accessor->getValue($entity, $var), $constraint->message); } } From ece90663e7ac5a0a76f1f63cbf159e861ed6f490 Mon Sep 17 00:00:00 2001 From: Jamal Youssefi Date: Wed, 25 Feb 2015 10:05:01 +0100 Subject: [PATCH 03/10] fix code convention --- .../Doctrine/Validator/Constraints/UniqueEntityValidator.php | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/Symfony/Bridge/Doctrine/Validator/Constraints/UniqueEntityValidator.php b/src/Symfony/Bridge/Doctrine/Validator/Constraints/UniqueEntityValidator.php index 4997d05ba3420..bc3b51e9afdf0 100644 --- a/src/Symfony/Bridge/Doctrine/Validator/Constraints/UniqueEntityValidator.php +++ b/src/Symfony/Bridge/Doctrine/Validator/Constraints/UniqueEntityValidator.php @@ -138,10 +138,9 @@ public function validate($entity, Constraint $constraint) $vars = array(); if (preg_match_all('/{{ ([a-zA-Z0-9_]+) }}/i', $constraint->message, $vars) > 0) { - $accessor = PropertyAccess::createPropertyAccessor(); - foreach($vars[1] as $var) { + foreach ($vars[1] as $var) { $constraint->message = str_replace(sprintf("{{ %s }}", $var), $accessor->getValue($entity, $var), $constraint->message); } } From a42fd8248597cc3fe81b65dce0254aa7f1618171 Mon Sep 17 00:00:00 2001 From: Jamal Youssefi Date: Sat, 4 Jul 2015 21:56:46 +0200 Subject: [PATCH 04/10] fix code convention --- .../Doctrine/Validator/Constraints/UniqueEntityValidator.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Symfony/Bridge/Doctrine/Validator/Constraints/UniqueEntityValidator.php b/src/Symfony/Bridge/Doctrine/Validator/Constraints/UniqueEntityValidator.php index f983e47b73448..5922ab9beb972 100644 --- a/src/Symfony/Bridge/Doctrine/Validator/Constraints/UniqueEntityValidator.php +++ b/src/Symfony/Bridge/Doctrine/Validator/Constraints/UniqueEntityValidator.php @@ -141,7 +141,7 @@ public function validate($entity, Constraint $constraint) $accessor = PropertyAccess::createPropertyAccessor(); foreach ($vars[1] as $var) { - $constraint->message = str_replace(sprintf("{{ %s }}", $var), $accessor->getValue($entity, $var), $constraint->message); + $constraint->message = str_replace(sprintf('{{ %s }}', $var), $accessor->getValue($entity, $var), $constraint->message); } } From 88c882c61e0c077b939f41cf63058f4111f8fc86 Mon Sep 17 00:00:00 2001 From: Jamal Youssefi Date: Sat, 11 Jul 2015 03:57:22 +0200 Subject: [PATCH 05/10] add test for uniqueEntity custom message --- .../Constraints/UniqueEntityValidatorTest.php | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/src/Symfony/Bridge/Doctrine/Tests/Validator/Constraints/UniqueEntityValidatorTest.php b/src/Symfony/Bridge/Doctrine/Tests/Validator/Constraints/UniqueEntityValidatorTest.php index 6efeebc451818..6644ccc995f2f 100644 --- a/src/Symfony/Bridge/Doctrine/Tests/Validator/Constraints/UniqueEntityValidatorTest.php +++ b/src/Symfony/Bridge/Doctrine/Tests/Validator/Constraints/UniqueEntityValidatorTest.php @@ -455,4 +455,34 @@ public function testEntityManagerNullObject() $this->validator->validate($entity, $constraint); } + + public function testCustomMessage() + { + $constraint = new UniqueEntity(array( + 'message' => 'An entity with name "{{ name }}" already exists.', + 'fields' => array('name'), + 'em' => self::EM_NAME, + )); + + $entity1 = new SingleIntIdEntity(1, 'Foo'); + $entity2 = new SingleIntIdEntity(2, 'Foo'); + + $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('An entity with name "Foo" already exists.') + ->atPath('property.path.name') + ->setInvalidValue('Foo') + ->assertRaised(); + } } From f5b11152f3bcf80463f7d677d9af790a5274bd5d Mon Sep 17 00:00:00 2001 From: Jamal Youssefi Date: Thu, 23 Jul 2015 22:47:30 +0200 Subject: [PATCH 06/10] update tests for uniqueEntity custom message --- .../Constraints/UniqueEntityValidatorTest.php | 33 ++++++++++++++++++- 1 file changed, 32 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 6644ccc995f2f..ae8527cc8ee21 100644 --- a/src/Symfony/Bridge/Doctrine/Tests/Validator/Constraints/UniqueEntityValidatorTest.php +++ b/src/Symfony/Bridge/Doctrine/Tests/Validator/Constraints/UniqueEntityValidatorTest.php @@ -456,7 +456,7 @@ public function testEntityManagerNullObject() $this->validator->validate($entity, $constraint); } - public function testCustomMessage() + public function testCustomMessageWithOneUniqueField() { $constraint = new UniqueEntity(array( 'message' => 'An entity with name "{{ name }}" already exists.', @@ -485,4 +485,35 @@ public function testCustomMessage() ->setInvalidValue('Foo') ->assertRaised(); } + + public function testCustomMessageWithTwoUniqueFields() + { + $constraint = new UniqueEntity(array( + 'message' => 'An entity with name1 "{{ name }}" and name2 "{{ name2 }}" already exists.', + '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('An entity with name1 "Foo" and name2 "Bar" already exists.') + ->atPath('property.path.name2') + ->setInvalidValue('Bar') + ->assertRaised(); + } } From 90a6f523a1d624febc89feb5e910e6bb5a0258e6 Mon Sep 17 00:00:00 2001 From: Jamal Youssefi Date: Sat, 10 Oct 2015 16:50:55 +0200 Subject: [PATCH 07/10] throw exception if PropertyAccess component is not available and add it to suggest section --- .../Doctrine/Validator/Constraints/UniqueEntityValidator.php | 5 +++++ src/Symfony/Bridge/Doctrine/composer.json | 3 ++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/src/Symfony/Bridge/Doctrine/Validator/Constraints/UniqueEntityValidator.php b/src/Symfony/Bridge/Doctrine/Validator/Constraints/UniqueEntityValidator.php index 0436af6b1443d..2be7924925de8 100644 --- a/src/Symfony/Bridge/Doctrine/Validator/Constraints/UniqueEntityValidator.php +++ b/src/Symfony/Bridge/Doctrine/Validator/Constraints/UniqueEntityValidator.php @@ -138,6 +138,11 @@ public function validate($entity, Constraint $constraint) $vars = array(); if (preg_match_all('/{{ ([a-zA-Z0-9_]+) }}/i', $constraint->message, $vars) > 0) { + + if (!class_exists('Symfony\\Component\\PropertyAccess\\PropertyAccess')) { + throw new \RuntimeException('Unable to access entity property as the Symfony PropertyAccess is not installed.'); + } + $accessor = PropertyAccess::createPropertyAccessor(); foreach ($vars[1] as $var) { diff --git a/src/Symfony/Bridge/Doctrine/composer.json b/src/Symfony/Bridge/Doctrine/composer.json index 338b3566ce1d0..cd919fe47a4b4 100644 --- a/src/Symfony/Bridge/Doctrine/composer.json +++ b/src/Symfony/Bridge/Doctrine/composer.json @@ -39,7 +39,8 @@ "symfony/validator": "", "doctrine/data-fixtures": "", "doctrine/dbal": "", - "doctrine/orm": "" + "doctrine/orm": "", + "symfony/property-access": "" }, "autoload": { "psr-0": { "Symfony\\Bridge\\Doctrine\\": "" } From 3ceda0856faeea107b256e0387085952102c2294 Mon Sep 17 00:00:00 2001 From: Jamal Youssefi Date: Sat, 10 Oct 2015 16:51:49 +0200 Subject: [PATCH 08/10] fix regex pattern --- .../Doctrine/Validator/Constraints/UniqueEntityValidator.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Symfony/Bridge/Doctrine/Validator/Constraints/UniqueEntityValidator.php b/src/Symfony/Bridge/Doctrine/Validator/Constraints/UniqueEntityValidator.php index 2be7924925de8..95a6f730cd69a 100644 --- a/src/Symfony/Bridge/Doctrine/Validator/Constraints/UniqueEntityValidator.php +++ b/src/Symfony/Bridge/Doctrine/Validator/Constraints/UniqueEntityValidator.php @@ -137,7 +137,7 @@ public function validate($entity, Constraint $constraint) $vars = array(); - if (preg_match_all('/{{ ([a-zA-Z0-9_]+) }}/i', $constraint->message, $vars) > 0) { + if (preg_match_all('/{{ ([a-zA-Z0-9_]+) }}/', $constraint->message, $vars) > 0) { if (!class_exists('Symfony\\Component\\PropertyAccess\\PropertyAccess')) { throw new \RuntimeException('Unable to access entity property as the Symfony PropertyAccess is not installed.'); From b5f239c3e4749c618974df51c83a3793e2c44bdf Mon Sep 17 00:00:00 2001 From: Jamal Youssefi Date: Sun, 11 Oct 2015 14:24:14 +0200 Subject: [PATCH 09/10] fix uniqueEntity parameters replacement and tests --- .../Validator/Constraints/UniqueEntityValidatorTest.php | 6 ++++-- .../Validator/Constraints/UniqueEntityValidator.php | 7 ++++--- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/src/Symfony/Bridge/Doctrine/Tests/Validator/Constraints/UniqueEntityValidatorTest.php b/src/Symfony/Bridge/Doctrine/Tests/Validator/Constraints/UniqueEntityValidatorTest.php index ae8527cc8ee21..315d30d875bc9 100644 --- a/src/Symfony/Bridge/Doctrine/Tests/Validator/Constraints/UniqueEntityValidatorTest.php +++ b/src/Symfony/Bridge/Doctrine/Tests/Validator/Constraints/UniqueEntityValidatorTest.php @@ -480,7 +480,8 @@ public function testCustomMessageWithOneUniqueField() $this->validator->validate($entity2, $constraint); - $this->buildViolation('An entity with name "Foo" already exists.') + $this->buildViolation('An entity with name "{{ name }}" already exists.') + ->setParameters(array("{{ name }}" => "Foo")) ->atPath('property.path.name') ->setInvalidValue('Foo') ->assertRaised(); @@ -511,7 +512,8 @@ public function testCustomMessageWithTwoUniqueFields() $this->validator->validate($entity2, $constraint); - $this->buildViolation('An entity with name1 "Foo" and name2 "Bar" already exists.') + $this->buildViolation('An entity with name1 "{{ name }}" and name2 "{{ name2 }}" already exists.') + ->setParameters(array("{{ name }}" => "Foo", "{{ name2 }}" => "Bar")) ->atPath('property.path.name2') ->setInvalidValue('Bar') ->assertRaised(); diff --git a/src/Symfony/Bridge/Doctrine/Validator/Constraints/UniqueEntityValidator.php b/src/Symfony/Bridge/Doctrine/Validator/Constraints/UniqueEntityValidator.php index 95a6f730cd69a..64f6fd89fde8d 100644 --- a/src/Symfony/Bridge/Doctrine/Validator/Constraints/UniqueEntityValidator.php +++ b/src/Symfony/Bridge/Doctrine/Validator/Constraints/UniqueEntityValidator.php @@ -136,6 +136,7 @@ public function validate($entity, Constraint $constraint) $invalidValue = isset($criteria[$errorPath]) ? $criteria[$errorPath] : $criteria[$fields[0]]; $vars = array(); + $paramaters = array(); if (preg_match_all('/{{ ([a-zA-Z0-9_]+) }}/', $constraint->message, $vars) > 0) { @@ -146,11 +147,11 @@ public function validate($entity, Constraint $constraint) $accessor = PropertyAccess::createPropertyAccessor(); foreach ($vars[1] as $var) { - $constraint->message = str_replace(sprintf('{{ %s }}', $var), $accessor->getValue($entity, $var), $constraint->message); + $paramaters[sprintf('{{ %s }}', $var)] = $accessor->getValue($entity, $var); } } - - $this->buildViolation($constraint->message) + + $this->buildViolation($constraint->message, $paramaters) ->atPath($errorPath) ->setInvalidValue($invalidValue) ->addViolation(); From 1c86b16e2ad41feddf10a220f8aa57ce008f7ce0 Mon Sep 17 00:00:00 2001 From: Jamal Youssefi Date: Sun, 11 Oct 2015 14:26:47 +0200 Subject: [PATCH 10/10] apply coding standard patch --- .../Tests/Validator/Constraints/UniqueEntityValidatorTest.php | 4 ++-- .../Doctrine/Validator/Constraints/UniqueEntityValidator.php | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Symfony/Bridge/Doctrine/Tests/Validator/Constraints/UniqueEntityValidatorTest.php b/src/Symfony/Bridge/Doctrine/Tests/Validator/Constraints/UniqueEntityValidatorTest.php index 315d30d875bc9..e23758a5df2e6 100644 --- a/src/Symfony/Bridge/Doctrine/Tests/Validator/Constraints/UniqueEntityValidatorTest.php +++ b/src/Symfony/Bridge/Doctrine/Tests/Validator/Constraints/UniqueEntityValidatorTest.php @@ -481,7 +481,7 @@ public function testCustomMessageWithOneUniqueField() $this->validator->validate($entity2, $constraint); $this->buildViolation('An entity with name "{{ name }}" already exists.') - ->setParameters(array("{{ name }}" => "Foo")) + ->setParameters(array('{{ name }}' => 'Foo')) ->atPath('property.path.name') ->setInvalidValue('Foo') ->assertRaised(); @@ -513,7 +513,7 @@ public function testCustomMessageWithTwoUniqueFields() $this->validator->validate($entity2, $constraint); $this->buildViolation('An entity with name1 "{{ name }}" and name2 "{{ name2 }}" already exists.') - ->setParameters(array("{{ name }}" => "Foo", "{{ name2 }}" => "Bar")) + ->setParameters(array('{{ name }}' => 'Foo', '{{ name2 }}' => 'Bar')) ->atPath('property.path.name2') ->setInvalidValue('Bar') ->assertRaised(); diff --git a/src/Symfony/Bridge/Doctrine/Validator/Constraints/UniqueEntityValidator.php b/src/Symfony/Bridge/Doctrine/Validator/Constraints/UniqueEntityValidator.php index 64f6fd89fde8d..6e462ab33a682 100644 --- a/src/Symfony/Bridge/Doctrine/Validator/Constraints/UniqueEntityValidator.php +++ b/src/Symfony/Bridge/Doctrine/Validator/Constraints/UniqueEntityValidator.php @@ -150,7 +150,7 @@ public function validate($entity, Constraint $constraint) $paramaters[sprintf('{{ %s }}', $var)] = $accessor->getValue($entity, $var); } } - + $this->buildViolation($constraint->message, $paramaters) ->atPath($errorPath) ->setInvalidValue($invalidValue) pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy