Procházet zdrojové kódy

Added ability to define getter and setter in xml mapping

Deni před 13 roky
rodič
revize
740498ea52

+ 4 - 2
Metadata/Driver/XmlDriver.php

@@ -136,10 +136,12 @@ class XmlDriver extends AbstractFileDriver
                         $pMetadata->xmlValue = 'true' === (string) $pElem->attributes()->{'xml-value'};
                     }
 
-                    $accessor = $pElem->attributes()->{'accessor'};
+                    $getter = $pElem->attributes()->{'accessor-getter'};
+                    $setter = $pElem->attributes()->{'accessor-setter'};
                     $pMetadata->setAccessor(
                         (string) ($pElem->attributes()->{'access-type'} ?: $classAccessType),
-                        $accessor ? (string) $accessor : null
+                        $getter ? (string) $getter : null,
+                        $setter ? (string) $setter : null
                     );
                 }
 

+ 12 - 0
Tests/Metadata/Driver/XmlDriverTest.php

@@ -70,6 +70,18 @@ class XmlDriverTest extends BaseDriverTest
         $this->assertEquals($p, $m->propertyMetadata['title']);
     }
 
+    public function testAccessorAttributes()
+    {
+        $m = $this->getDriver()->loadMetadataForClass(new \ReflectionClass('JMS\SerializerBundle\Tests\Fixtures\GetSetObject'));
+
+        $p = new PropertyMetadata($m->name, 'name');
+        $p->type = 'string';
+        $p->getter = 'getTrimmedName';
+        $p->setter = 'setCapitalizedName';
+
+        $this->assertEquals($p, $m->propertyMetadata['name']);
+    }
+
     protected function getDriver()
     {
         $append = '';

+ 7 - 0
Tests/Metadata/Driver/xml/GetSetObject.xml

@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<serializer>
+    <class name="JMS\SerializerBundle\Tests\Fixtures\GetSetObject" access-type="public_method">
+        <property name="id" type="integer" access-type="property" />
+        <property name="name" type="string" accessor-getter="getTrimmedName" accessor-setter="setCapitalizedName" />
+    </class>
+</serializer>