2016-12-27 120 views
4

我试试这个代码(via Fractal)来获得结果:如何从分形变形结果中删除“数据”属性?

public static function doIt($array, $transformer) 
{ 
    $manager = new Manager(); 

    $serializer = new \League\Fractal\Serializer\ArraySerializer(); 
    $manager->setSerializer($serializer); 

    if ($array instanceof Collection) { 
     $resource = new FractalCollection($array, new $transformer); 
    } else { 
     $resource = new FractalItem($array, new $transformer); 
    } 

    return $manager->createData($resource)->toArray(); 
} 

当你看,我说

$serializer = new \League\Fractal\Serializer\ArraySerializer(); 
$manager->setSerializer($serializer); 

删除从结果数组 '数据' 属性。

array:3 [▼ 
    "key" => 1 
    "title" => "First Level Title" 
    "childrens" => array:1 [▼ 
    "data" => array:16 [▼   ←-------- it need remove! 
     0 => array:2 [▼ 
     "key" => 2 
     "title" => "Children Title" 
     ] 
     1 => array:2 [▶] 
     2 => array:2 [▶] 
     3 => array:2 [▶] 
    ] 
    ] 
] 

这是很好的工作,但只适用于第一级阵列。怎么做,为此适用于所有嵌套数组?

回答

-2

您可以使用unset:

unset($array['data']); 
+0

它不工作嵌套集合 – Stanislav

+0

请加全阵列或这里https://eval.in/张贴 – 2016-12-27 11:49:58

+0

它不犯感。重要的是,子阵列,一个未知的深度。我已经解决了这个问题,下面的解决方案。 – Stanislav

-1

我解决了这个问题。您需要创建自己的DataArraySerializer的Serializer扩展。它有三个方法和他们每个人需要改变返回值是:

use League\Fractal\Serializer\DataArraySerializer; 

class Serializer extends DataArraySerializer 
{ 
    /** 
    * Serialize a collection. 
    * 
    * @param string $resourceKey 
    * @param array $data 
    * 
    * @return array 
    */ 
    public function collection($resourceKey, array $data) 
    { 
     return $data; 
    } 

    /** 
    * Serialize an item. 
    * 
    * @param string $resourceKey 
    * @param array $data 
    * 
    * @return array 
    */ 
    public function item($resourceKey, array $data) 
    { 
     return $data; 
    } 

    /** 
    * Serialize null resource. 
    * 
    * @return array 
    */ 
    public function null() 
    { 
     return []; 
    } 

}