2016-12-27 33 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 []; 
    } 

}