Browse Source

[Validator] Fixed group sequence support in the XML and YAML drivers

Bernhard Schussek 13 years ago
parent
commit
2a3235ac22

+ 6 - 0
src/Symfony/Component/Validator/Mapping/Loader/XmlFileLoader.php

@@ -43,6 +43,12 @@ class XmlFileLoader extends FileLoader
         if (isset($this->classes[$metadata->getClassName()])) {
         if (isset($this->classes[$metadata->getClassName()])) {
             $xml = $this->classes[$metadata->getClassName()];
             $xml = $this->classes[$metadata->getClassName()];
 
 
+            foreach ($xml->{'group-sequence'} as $groupSequence) {
+                if (count($groupSequence->value) > 0) {
+                    $metadata->setGroupSequence($this->parseValues($groupSequence[0]->value));
+                }
+            }
+
             foreach ($this->parseConstraints($xml->constraint) as $constraint) {
             foreach ($this->parseConstraints($xml->constraint) as $constraint) {
                 $metadata->addConstraint($constraint);
                 $metadata->addConstraint($constraint);
             }
             }

+ 4 - 0
src/Symfony/Component/Validator/Mapping/Loader/YamlFileLoader.php

@@ -54,6 +54,10 @@ class YamlFileLoader extends FileLoader
         if (isset($this->classes[$metadata->getClassName()])) {
         if (isset($this->classes[$metadata->getClassName()])) {
             $yaml = $this->classes[$metadata->getClassName()];
             $yaml = $this->classes[$metadata->getClassName()];
 
 
+            if (isset($yaml['group_sequence'])) {
+                $metadata->setGroupSequence($yaml['group_sequence']);
+            }
+
             if (isset($yaml['constraints'])) {
             if (isset($yaml['constraints'])) {
                 foreach ($this->parseNodes($yaml['constraints']) as $constraint) {
                 foreach ($this->parseNodes($yaml['constraints']) as $constraint) {
                     $metadata->addConstraint($constraint);
                     $metadata->addConstraint($constraint);

+ 13 - 0
src/Symfony/Component/Validator/Mapping/Loader/schema/dic/constraint-mapping/constraint-mapping-1.0.xsd

@@ -52,12 +52,25 @@
       ]]></xsd:documentation>
       ]]></xsd:documentation>
     </xsd:annotation>
     </xsd:annotation>
     <xsd:choice minOccurs="0" maxOccurs="unbounded">
     <xsd:choice minOccurs="0" maxOccurs="unbounded">
+      <xsd:element name="group-sequence" type="group-sequence" minOccurs="0" maxOccurs="1" />
       <xsd:element name="constraint" type="constraint" minOccurs="0" maxOccurs="unbounded" />
       <xsd:element name="constraint" type="constraint" minOccurs="0" maxOccurs="unbounded" />
       <xsd:element name="property" type="property" minOccurs="0" maxOccurs="unbounded" />
       <xsd:element name="property" type="property" minOccurs="0" maxOccurs="unbounded" />
       <xsd:element name="getter" type="getter" minOccurs="0" maxOccurs="unbounded" />
       <xsd:element name="getter" type="getter" minOccurs="0" maxOccurs="unbounded" />
     </xsd:choice>
     </xsd:choice>
     <xsd:attribute name="name" type="xsd:string" use="required" />
     <xsd:attribute name="name" type="xsd:string" use="required" />
   </xsd:complexType>
   </xsd:complexType>
+
+  <xsd:complexType name="group-sequence">
+    <xsd:annotation>
+      <xsd:documentation><![CDATA[
+        Contains the group sequence of a class. Each group should be written
+        into a "value" tag.
+      ]]></xsd:documentation>
+    </xsd:annotation>
+    <xsd:sequence>
+      <xsd:element name="value" type="value" minOccurs="1" maxOccurs="unbounded" />
+    </xsd:sequence>
+  </xsd:complexType>
   
   
   <xsd:complexType name="property">
   <xsd:complexType name="property">
     <xsd:annotation>
     <xsd:annotation>

+ 1 - 0
tests/Symfony/Tests/Component/Validator/Mapping/Loader/XmlFileLoaderTest.php

@@ -51,6 +51,7 @@ class XmlFileLoaderTest extends \PHPUnit_Framework_TestCase
         $loader->loadClassMetadata($metadata);
         $loader->loadClassMetadata($metadata);
 
 
         $expected = new ClassMetadata('Symfony\Tests\Component\Validator\Fixtures\Entity');
         $expected = new ClassMetadata('Symfony\Tests\Component\Validator\Fixtures\Entity');
+        $expected->setGroupSequence(array('Foo', 'Entity'));
         $expected->addConstraint(new ConstraintA());
         $expected->addConstraint(new ConstraintA());
         $expected->addConstraint(new ConstraintB());
         $expected->addConstraint(new ConstraintB());
         $expected->addPropertyConstraint('firstName', new NotNull());
         $expected->addPropertyConstraint('firstName', new NotNull());

+ 1 - 0
tests/Symfony/Tests/Component/Validator/Mapping/Loader/YamlFileLoaderTest.php

@@ -69,6 +69,7 @@ class YamlFileLoaderTest extends \PHPUnit_Framework_TestCase
         $loader->loadClassMetadata($metadata);
         $loader->loadClassMetadata($metadata);
 
 
         $expected = new ClassMetadata('Symfony\Tests\Component\Validator\Fixtures\Entity');
         $expected = new ClassMetadata('Symfony\Tests\Component\Validator\Fixtures\Entity');
+        $expected->setGroupSequence(array('Foo', 'Entity'));
         $expected->addConstraint(new ConstraintA());
         $expected->addConstraint(new ConstraintA());
         $expected->addConstraint(new ConstraintB());
         $expected->addConstraint(new ConstraintB());
         $expected->addPropertyConstraint('firstName', new NotNull());
         $expected->addPropertyConstraint('firstName', new NotNull());

+ 5 - 0
tests/Symfony/Tests/Component/Validator/Mapping/Loader/constraint-mapping.xml

@@ -8,6 +8,11 @@
 
 
   <class name="Symfony\Tests\Component\Validator\Fixtures\Entity">
   <class name="Symfony\Tests\Component\Validator\Fixtures\Entity">
 
 
+    <group-sequence>
+      <value>Foo</value>
+      <value>Entity</value>
+    </group-sequence>
+
     <!-- CLASS CONSTRAINTS -->
     <!-- CLASS CONSTRAINTS -->
 
 
     <!-- Custom constraint -->
     <!-- Custom constraint -->

+ 4 - 0
tests/Symfony/Tests/Component/Validator/Mapping/Loader/constraint-mapping.yml

@@ -2,6 +2,10 @@ namespaces:
   custom: Symfony\Tests\Component\Validator\Fixtures\
   custom: Symfony\Tests\Component\Validator\Fixtures\
 
 
 Symfony\Tests\Component\Validator\Fixtures\Entity:
 Symfony\Tests\Component\Validator\Fixtures\Entity:
+  group_sequence:
+    - Foo
+    - Entity
+
   constraints:
   constraints:
     # Custom constraint
     # Custom constraint
     - Symfony\Tests\Component\Validator\Fixtures\ConstraintA: ~
     - Symfony\Tests\Component\Validator\Fixtures\ConstraintA: ~