From 33b0a177b53aeac9bb46f309cdc63243cd0bfc13 Mon Sep 17 00:00:00 2001 From: Fabien Potencier Date: Thu, 22 Aug 2013 21:40:01 +0200 Subject: [PATCH] [Validator] fixed Boolean handling in XML constraint mappings (closes #5603) --- .../Mapping/Loader/XmlFileLoader.php | 5 ++++- .../Mapping/Loader/XmlFileLoaderTest.php | 17 +++++++++++++++++ .../Loader/constraint-mapping-non-strings.xml | 19 +++++++++++++++++++ .../Mapping/Loader/constraint-mapping.xml | 2 +- 4 files changed, 41 insertions(+), 2 deletions(-) create mode 100644 src/Symfony/Component/Validator/Tests/Mapping/Loader/constraint-mapping-non-strings.xml diff --git a/src/Symfony/Component/Validator/Mapping/Loader/XmlFileLoader.php b/src/Symfony/Component/Validator/Mapping/Loader/XmlFileLoader.php index 6b25f18817afe..a9ae39677775b 100644 --- a/src/Symfony/Component/Validator/Mapping/Loader/XmlFileLoader.php +++ b/src/Symfony/Component/Validator/Mapping/Loader/XmlFileLoader.php @@ -166,7 +166,10 @@ protected function parseOptions(\SimpleXMLElement $nodes) $value = array(); } } else { - $value = trim($node); + $value = XmlUtils::phpize($node); + if (is_string($value)) { + $value = trim($value); + } } $options[(string) $node['name']] = $value; diff --git a/src/Symfony/Component/Validator/Tests/Mapping/Loader/XmlFileLoaderTest.php b/src/Symfony/Component/Validator/Tests/Mapping/Loader/XmlFileLoaderTest.php index 22478e606d0ec..741481c176c42 100644 --- a/src/Symfony/Component/Validator/Tests/Mapping/Loader/XmlFileLoaderTest.php +++ b/src/Symfony/Component/Validator/Tests/Mapping/Loader/XmlFileLoaderTest.php @@ -16,6 +16,7 @@ use Symfony\Component\Validator\Constraints\NotNull; use Symfony\Component\Validator\Constraints\Range; use Symfony\Component\Validator\Constraints\Choice; +use Symfony\Component\Validator\Constraints\Regex; use Symfony\Component\Validator\Mapping\ClassMetadata; use Symfony\Component\Validator\Mapping\Loader\XmlFileLoader; use Symfony\Component\Validator\Tests\Fixtures\ConstraintA; @@ -68,6 +69,22 @@ public function testLoadClassMetadata() $this->assertEquals($expected, $metadata); } + public function testLoadClassMetadataWithNonStrings() + { + $loader = new XmlFileLoader(__DIR__.'/constraint-mapping-non-strings.xml'); + $metadata = new ClassMetadata('Symfony\Component\Validator\Tests\Fixtures\Entity'); + + $loader->loadClassMetadata($metadata); + + $expected = new ClassMetadata('Symfony\Component\Validator\Tests\Fixtures\Entity'); + $expected->addPropertyConstraint('firstName', new Regex(array('pattern' => '/^1/', 'match' => false))); + + $properties = $metadata->getPropertyMetadata('firstName'); + $constraints = $properties[0]->getConstraints(); + + $this->assertFalse($constraints[0]->match); + } + public function testLoadGroupSequenceProvider() { $loader = new XmlFileLoader(__DIR__.'/constraint-mapping.xml'); diff --git a/src/Symfony/Component/Validator/Tests/Mapping/Loader/constraint-mapping-non-strings.xml b/src/Symfony/Component/Validator/Tests/Mapping/Loader/constraint-mapping-non-strings.xml new file mode 100644 index 0000000000000..dfd5edddc5eca --- /dev/null +++ b/src/Symfony/Component/Validator/Tests/Mapping/Loader/constraint-mapping-non-strings.xml @@ -0,0 +1,19 @@ + + + + + Symfony\Component\Validator\Tests\Fixtures\ + + + + + + + + + + + + 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 946200ba11ca6..dfac70d9cf6e2 100644 --- a/src/Symfony/Component/Validator/Tests/Mapping/Loader/constraint-mapping.xml +++ b/src/Symfony/Component/Validator/Tests/Mapping/Loader/constraint-mapping.xml @@ -78,7 +78,7 @@ - +