gpt4 book ai didi

php - 如何从 Fractal Transformer 结果中删除 'data' 属性?

转载 作者:可可西里 更新时间:2023-11-01 13:29:39 32 4
gpt4 key购买 nike

我尝试使用此代码 ( 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 [▶]
]
]
]

它很好用,但只适用于数组的第一层。如何做到这一点,使其适用于所有嵌套数组?

最佳答案

我解决了这个问题。您需要创建自己的 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());

关于php - 如何从 Fractal Transformer 结果中删除 'data' 属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41343957/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com