我正在使用Yii2构建REST API。通常,请求响应看起来像这样:
{
"items": [
{
"id": 1,
...
},
{
"id": 2,
...
},
...
],
"_links": {
"self": {
"href": "http://localhost/users?page=1"
},
"next": {
"href": "http://localhost/users?page=2"
},
"last": {
"href": "http://localhost/users?page=50"
}
},
"_meta": {
"totalCount": 1000,
"pageCount": 50,
"currentPage": 1,
"perPage": 20
}
}
我想覆盖序列化程序,以便包含在" _meta"相反,数组包含在数组的根中,即与" item"相同的级别。和" _links"。我该怎么做?在哪里?
谢谢。
答案 0 :(得分:1)
根据documentation您创建一个新的Serializer类。所以,基本上,你扩展yii\rest\Serializer
并重写serialize()
方法。然后为控制器设置自定义序列化程序。
class MySerializer extends Serializer
{
public function serialize($data)
{
$d = parent::serialize($data);
$m = $d['_meta'];
unset($d['_meta']);
return array_merge($d, $m);
}
}
class MyController extends ActiveController
{
public $serializer = [
'class' => 'yii\rest\MySerializer',
'collectionEnvelope' => 'items',
];
}