瀏覽代碼

Pass object to each exclusion strategy class

William DURAND 13 年之前
父節點
當前提交
0cc852a86f

+ 6 - 3
Serializer/Exclusion/ExclusionStrategyInterface.php

@@ -32,16 +32,19 @@ interface ExclusionStrategyInterface
      * Whether the class should be skipped.
      *
      * @param ClassMetadata $metadata
+     * @param object        $object
+     *
      * @return boolean
      */
-    function shouldSkipClass(ClassMetadata $metadata);
+    function shouldSkipClass(ClassMetadata $metadata, $object);
 
     /**
      * Whether the property should be skipped.
      *
      * @param PropertyMetadata $property
+     * @param object           $object
      *
      * @return boolean
      */
-    function shouldSkipProperty(PropertyMetadata $property);
-}
+    function shouldSkipProperty(PropertyMetadata $property, $object);
+}

+ 2 - 2
Serializer/Exclusion/GroupsExclusionStrategy.php

@@ -37,7 +37,7 @@ class GroupsExclusionStrategy implements ExclusionStrategyInterface
         }
     }
 
-    public function shouldSkipClass(ClassMetadata $metadata)
+    public function shouldSkipClass(ClassMetadata $metadata, $object)
     {
         return false;
     }
@@ -45,7 +45,7 @@ class GroupsExclusionStrategy implements ExclusionStrategyInterface
     /**
      * {@inheritDoc}
      */
-    public function shouldSkipProperty(PropertyMetadata $property)
+    public function shouldSkipProperty(PropertyMetadata $property, $object)
     {
         if (!$property->groups) {
             return true;

+ 3 - 3
Serializer/Exclusion/VersionExclusionStrategy.php

@@ -30,7 +30,7 @@ class VersionExclusionStrategy implements ExclusionStrategyInterface
         $this->version = $version;
     }
 
-    public function shouldSkipClass(ClassMetadata $metadata)
+    public function shouldSkipClass(ClassMetadata $metadata, $object)
     {
         return false;
     }
@@ -38,7 +38,7 @@ class VersionExclusionStrategy implements ExclusionStrategyInterface
     /**
      * {@inheritDoc}
      */
-    public function shouldSkipProperty(PropertyMetadata $property)
+    public function shouldSkipProperty(PropertyMetadata $property, $object)
     {
         if ((null !== $version = $property->sinceVersion) && version_compare($this->version, $version, '<')) {
             return true;
@@ -50,4 +50,4 @@ class VersionExclusionStrategy implements ExclusionStrategyInterface
 
         return false;
     }
-}
+}

+ 2 - 2
Serializer/GraphNavigator.php

@@ -97,7 +97,7 @@ final class GraphNavigator
             }
 
             $metadata = $this->metadataFactory->getMetadataForClass($type);
-            if (null !== $this->exclusionStrategy && $this->exclusionStrategy->shouldSkipClass($metadata)) {
+            if (null !== $this->exclusionStrategy && $this->exclusionStrategy->shouldSkipClass($metadata, $data)) {
                 if (self::DIRECTION_SERIALIZATION === $this->direction) {
                     $this->visiting->detach($data);
                 }
@@ -122,7 +122,7 @@ final class GraphNavigator
 
             $visitor->startVisitingObject($metadata, $data, $type);
             foreach ($metadata->propertyMetadata as $propertyMetadata) {
-                if (null !== $this->exclusionStrategy && $this->exclusionStrategy->shouldSkipProperty($propertyMetadata)) {
+                if (null !== $this->exclusionStrategy && $this->exclusionStrategy->shouldSkipProperty($propertyMetadata, $data)) {
                     continue;
                 }