我尝试使用以下代码(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);从结果数组中删除“data”属性。
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 [▶]
]
]
]它可以很好地工作,但只适用于第一级数组。如何使其适用于所有嵌套数组?
发布于 2016-12-27 19:48:49
我解决了这个问题。您需要创建自己的DataArraySerializer序列化扩展。它有三个方法,其中每个方法都需要将返回值更改为:
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 [];
}
}现在,我们只需将此序列化程序设置为我们使用的Manager实例。
$manager = new Manager();
$manager->setSerializer(new Serializer());发布于 2018-05-08 18:01:32
你可以使用current()方法,我希望它能解决你的问题。
示例:
return current($manager->createData( $resource )->toArray());发布于 2016-12-27 19:12:46
您可以使用unset:
unset($array['data']);https://stackoverflow.com/questions/41343957
复制相似问题