|
@@ -38,6 +38,7 @@ class ClassMetadata extends MergeableClassMetadata
|
|
|
public $preSerializeMethods = array();
|
|
|
public $postSerializeMethods = array();
|
|
|
public $postDeserializeMethods = array();
|
|
|
+ public $virtualPropertyMethods = array();
|
|
|
public $xmlRootName;
|
|
|
public $accessorOrder;
|
|
|
public $customOrder;
|
|
@@ -86,6 +87,11 @@ class ClassMetadata extends MergeableClassMetadata
|
|
|
$this->postDeserializeMethods[] = $method;
|
|
|
}
|
|
|
|
|
|
+ public function addVirtualPropertyMethod(MethodMetadata $method, $field)
|
|
|
+ {
|
|
|
+ $this->virtualPropertyMethods[$field] = $method;
|
|
|
+ }
|
|
|
+
|
|
|
public function merge(MergeableInterface $object)
|
|
|
{
|
|
|
if (!$object instanceof ClassMetadata) {
|
|
@@ -114,6 +120,7 @@ class ClassMetadata extends MergeableClassMetadata
|
|
|
$this->preSerializeMethods,
|
|
|
$this->postSerializeMethods,
|
|
|
$this->postDeserializeMethods,
|
|
|
+ $this->virtualPropertyMethods,
|
|
|
$this->xmlRootName,
|
|
|
$this->accessorOrder,
|
|
|
$this->customOrder,
|
|
@@ -127,6 +134,7 @@ class ClassMetadata extends MergeableClassMetadata
|
|
|
$this->preSerializeMethods,
|
|
|
$this->postSerializeMethods,
|
|
|
$this->postDeserializeMethods,
|
|
|
+ $this->virtualPropertyMethods,
|
|
|
$this->xmlRootName,
|
|
|
$this->accessorOrder,
|
|
|
$this->customOrder,
|
|
@@ -138,32 +146,32 @@ class ClassMetadata extends MergeableClassMetadata
|
|
|
|
|
|
private function sortProperties()
|
|
|
{
|
|
|
- switch ($this->accessorOrder) {
|
|
|
- case self::ACCESSOR_ORDER_ALPHABETICAL:
|
|
|
- ksort($this->propertyMetadata);
|
|
|
- break;
|
|
|
-
|
|
|
- case self::ACCESSOR_ORDER_CUSTOM:
|
|
|
+ switch ($this->accessorOrder) {
|
|
|
+ case self::ACCESSOR_ORDER_ALPHABETICAL:
|
|
|
+ ksort($this->propertyMetadata);
|
|
|
+ break;
|
|
|
+
|
|
|
+ case self::ACCESSOR_ORDER_CUSTOM:
|
|
|
$order = $this->customOrder;
|
|
|
uksort($this->propertyMetadata, function($a, $b) use ($order) {
|
|
|
- $existsA = isset($order[$a]);
|
|
|
- $existsB = isset($order[$b]);
|
|
|
-
|
|
|
- if (!$existsA && !$existsB) {
|
|
|
- return 0;
|
|
|
- }
|
|
|
-
|
|
|
- if (!$existsA) {
|
|
|
- return 1;
|
|
|
- }
|
|
|
-
|
|
|
- if (!$existsB) {
|
|
|
- return -1;
|
|
|
+ $existsA = isset($order[$a]);
|
|
|
+ $existsB = isset($order[$b]);
|
|
|
+
|
|
|
+ if (!$existsA && !$existsB) {
|
|
|
+ return 0;
|
|
|
}
|
|
|
|
|
|
- return $order[$a] < $order[$b] ? -1 : 1;
|
|
|
+ if (!$existsA) {
|
|
|
+ return 1;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (!$existsB) {
|
|
|
+ return -1;
|
|
|
+ }
|
|
|
+
|
|
|
+ return $order[$a] < $order[$b] ? -1 : 1;
|
|
|
});
|
|
|
- break;
|
|
|
- }
|
|
|
+ break;
|
|
|
+ }
|
|
|
}
|
|
|
}
|