From df06ed455dddf10ec3f656653ec4b61922eeefd0 Mon Sep 17 00:00:00 2001 From: Philipp Rieber Date: Sat, 21 Sep 2013 14:29:04 +0200 Subject: [PATCH 1/3] [Validator] Added hasser support for entity method validation Hasser support was added in addition to existing getter and isser support --- .../Component/Validator/Mapping/Loader/AnnotationLoader.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Symfony/Component/Validator/Mapping/Loader/AnnotationLoader.php b/src/Symfony/Component/Validator/Mapping/Loader/AnnotationLoader.php index 10745c72e7ffc..3a624072e0242 100644 --- a/src/Symfony/Component/Validator/Mapping/Loader/AnnotationLoader.php +++ b/src/Symfony/Component/Validator/Mapping/Loader/AnnotationLoader.php @@ -70,10 +70,10 @@ public function loadClassMetadata(ClassMetadata $metadata) $metadata->addConstraint($constraint); } elseif ($constraint instanceof Constraint) { - if (preg_match('/^(get|is)(.+)$/i', $method->name, $matches)) { + if (preg_match('/^(get|is|has)(.+)$/i', $method->name, $matches)) { $metadata->addGetterConstraint(lcfirst($matches[2]), $constraint); } else { - throw new MappingException(sprintf('The constraint on "%s::%s" cannot be added. Constraints can only be added on methods beginning with "get" or "is".', $className, $method->name)); + throw new MappingException(sprintf('The constraint on "%s::%s" cannot be added. Constraints can only be added on methods beginning with "get", "is" or "has".', $className, $method->name)); } } From ef5c72bf47351e874611f3fa759155659b150b56 Mon Sep 17 00:00:00 2001 From: Philipp Rieber Date: Tue, 24 Dec 2013 10:13:01 +0100 Subject: [PATCH 2/3] Implement "hasser" support in GetterMetadata --- src/Symfony/Component/Validator/Mapping/GetterMetadata.php | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/Symfony/Component/Validator/Mapping/GetterMetadata.php b/src/Symfony/Component/Validator/Mapping/GetterMetadata.php index 1e44062463728..4bd609d035fae 100644 --- a/src/Symfony/Component/Validator/Mapping/GetterMetadata.php +++ b/src/Symfony/Component/Validator/Mapping/GetterMetadata.php @@ -27,13 +27,16 @@ public function __construct($class, $property) { $getMethod = 'get'.ucfirst($property); $isMethod = 'is'.ucfirst($property); + $hasMethod = 'has'.ucfirst($property); if (method_exists($class, $getMethod)) { $method = $getMethod; } elseif (method_exists($class, $isMethod)) { $method = $isMethod; + } elseif (method_exists($class, $hasMethod)) { + $method = $hasMethod; } else { - throw new ValidatorException(sprintf('Neither method %s nor %s exists in class %s', $getMethod, $isMethod, $class)); + throw new ValidatorException(sprintf('Neither of these methods exist in class %s: %s, %s, %s', $class, $getMethod, $isMethod, $hasMethod)); } parent::__construct($class, $method, $property); From 10027db429442145552b3b86d42832620935d386 Mon Sep 17 00:00:00 2001 From: Philipp Date: Sat, 4 Jan 2014 07:07:38 +0100 Subject: [PATCH 3/3] [Validator] Add isser/hasser tests for loaders and metadata --- .../Validator/Tests/Fixtures/Entity.php | 16 ++++++++++++++++ .../Tests/Mapping/GetterMetadataTest.php | 16 ++++++++++++++++ .../Mapping/Loader/AnnotationLoaderTest.php | 5 +++++ .../Tests/Mapping/Loader/XmlFileLoaderTest.php | 3 +++ .../Tests/Mapping/Loader/YamlFileLoaderTest.php | 3 +++ .../Tests/Mapping/Loader/constraint-mapping.xml | 6 ++++++ .../Tests/Mapping/Loader/constraint-mapping.yml | 4 ++++ 7 files changed, 53 insertions(+) diff --git a/src/Symfony/Component/Validator/Tests/Fixtures/Entity.php b/src/Symfony/Component/Validator/Tests/Fixtures/Entity.php index 70bdc5aec6998..fbd879a94eaf1 100644 --- a/src/Symfony/Component/Validator/Tests/Fixtures/Entity.php +++ b/src/Symfony/Component/Validator/Tests/Fixtures/Entity.php @@ -56,6 +56,22 @@ public function getLastName() return $this->lastName; } + /** + * @Assert\True + */ + public function isValid() + { + return 'valid'; + } + + /** + * @Assert\True + */ + public function hasPermissions() + { + return 'permissions'; + } + public function getData() { return 'Overridden data'; diff --git a/src/Symfony/Component/Validator/Tests/Mapping/GetterMetadataTest.php b/src/Symfony/Component/Validator/Tests/Mapping/GetterMetadataTest.php index 1ce83e9159768..078159971af83 100644 --- a/src/Symfony/Component/Validator/Tests/Mapping/GetterMetadataTest.php +++ b/src/Symfony/Component/Validator/Tests/Mapping/GetterMetadataTest.php @@ -43,4 +43,20 @@ public function testGetPropertyValueFromOverriddenPublicGetter() $this->assertEquals('Overridden data', $metadata->getPropertyValue($entity)); } + + public function testGetPropertyValueFromIsser() + { + $entity = new Entity(); + $metadata = new GetterMetadata(self::CLASSNAME, 'valid'); + + $this->assertEquals('valid', $metadata->getPropertyValue($entity)); + } + + public function testGetPropertyValueFromHasser() + { + $entity = new Entity(); + $metadata = new GetterMetadata(self::CLASSNAME, 'permissions'); + + $this->assertEquals('permissions', $metadata->getPropertyValue($entity)); + } } diff --git a/src/Symfony/Component/Validator/Tests/Mapping/Loader/AnnotationLoaderTest.php b/src/Symfony/Component/Validator/Tests/Mapping/Loader/AnnotationLoaderTest.php index 0d255b8fcad0d..e4ea6cfc6a498 100644 --- a/src/Symfony/Component/Validator/Tests/Mapping/Loader/AnnotationLoaderTest.php +++ b/src/Symfony/Component/Validator/Tests/Mapping/Loader/AnnotationLoaderTest.php @@ -18,6 +18,7 @@ use Symfony\Component\Validator\Constraints\NotNull; use Symfony\Component\Validator\Constraints\Range; use Symfony\Component\Validator\Constraints\Choice; +use Symfony\Component\Validator\Constraints\True; use Symfony\Component\Validator\Mapping\ClassMetadata; use Symfony\Component\Validator\Mapping\Loader\AnnotationLoader; use Symfony\Component\Validator\Tests\Fixtures\ConstraintA; @@ -67,6 +68,8 @@ public function testLoadClassMetadata() 'choices' => array('A', 'B'), ))); $expected->addGetterConstraint('lastName', new NotNull()); + $expected->addGetterConstraint('valid', new True()); + $expected->addGetterConstraint('permissions', new True()); // load reflection class so that the comparison passes $expected->getReflectionClass(); @@ -134,6 +137,8 @@ public function testLoadClassMetadataAndMerge() 'choices' => array('A', 'B'), ))); $expected->addGetterConstraint('lastName', new NotNull()); + $expected->addGetterConstraint('valid', new True()); + $expected->addGetterConstraint('permissions', new True()); // load reflection class so that the comparison passes $expected->getReflectionClass(); diff --git a/src/Symfony/Component/Validator/Tests/Mapping/Loader/XmlFileLoaderTest.php b/src/Symfony/Component/Validator/Tests/Mapping/Loader/XmlFileLoaderTest.php index 82195405e6614..e7243edc2c31f 100644 --- a/src/Symfony/Component/Validator/Tests/Mapping/Loader/XmlFileLoaderTest.php +++ b/src/Symfony/Component/Validator/Tests/Mapping/Loader/XmlFileLoaderTest.php @@ -18,6 +18,7 @@ use Symfony\Component\Validator\Constraints\Range; use Symfony\Component\Validator\Constraints\Choice; use Symfony\Component\Validator\Constraints\Regex; +use Symfony\Component\Validator\Constraints\True; use Symfony\Component\Validator\Mapping\ClassMetadata; use Symfony\Component\Validator\Mapping\Loader\XmlFileLoader; use Symfony\Component\Validator\Tests\Fixtures\ConstraintA; @@ -69,6 +70,8 @@ public function testLoadClassMetadata() 'choices' => array('A', 'B'), ))); $expected->addGetterConstraint('lastName', new NotNull()); + $expected->addGetterConstraint('valid', new True()); + $expected->addGetterConstraint('permissions', new True()); $this->assertEquals($expected, $metadata); } diff --git a/src/Symfony/Component/Validator/Tests/Mapping/Loader/YamlFileLoaderTest.php b/src/Symfony/Component/Validator/Tests/Mapping/Loader/YamlFileLoaderTest.php index 0d9a0b62c3122..1de902a551a40 100644 --- a/src/Symfony/Component/Validator/Tests/Mapping/Loader/YamlFileLoaderTest.php +++ b/src/Symfony/Component/Validator/Tests/Mapping/Loader/YamlFileLoaderTest.php @@ -17,6 +17,7 @@ use Symfony\Component\Validator\Constraints\NotNull; use Symfony\Component\Validator\Constraints\Range; use Symfony\Component\Validator\Constraints\Choice; +use Symfony\Component\Validator\Constraints\True; use Symfony\Component\Validator\Mapping\ClassMetadata; use Symfony\Component\Validator\Mapping\Loader\YamlFileLoader; use Symfony\Component\Validator\Tests\Fixtures\ConstraintA; @@ -86,6 +87,8 @@ public function testLoadClassMetadata() 'choices' => array('A', 'B'), ))); $expected->addGetterConstraint('lastName', new NotNull()); + $expected->addGetterConstraint('valid', new True()); + $expected->addGetterConstraint('permissions', new True()); $this->assertEquals($expected, $metadata); } diff --git a/src/Symfony/Component/Validator/Tests/Mapping/Loader/constraint-mapping.xml b/src/Symfony/Component/Validator/Tests/Mapping/Loader/constraint-mapping.xml index 1eee1cb18036a..9b637e9a427fa 100644 --- a/src/Symfony/Component/Validator/Tests/Mapping/Loader/constraint-mapping.xml +++ b/src/Symfony/Component/Validator/Tests/Mapping/Loader/constraint-mapping.xml @@ -102,6 +102,12 @@ + + + + + + diff --git a/src/Symfony/Component/Validator/Tests/Mapping/Loader/constraint-mapping.yml b/src/Symfony/Component/Validator/Tests/Mapping/Loader/constraint-mapping.yml index e52d3f04b2ced..e96c5e08663a1 100644 --- a/src/Symfony/Component/Validator/Tests/Mapping/Loader/constraint-mapping.yml +++ b/src/Symfony/Component/Validator/Tests/Mapping/Loader/constraint-mapping.yml @@ -53,6 +53,10 @@ Symfony\Component\Validator\Tests\Fixtures\Entity: getters: lastName: - NotNull: ~ + valid: + - "True": ~ + permissions: + - "True": ~ Symfony\Component\Validator\Tests\Fixtures\GroupSequenceProviderEntity: group_sequence_provider: true 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