问一下大家,laravel怎么在api接口输出的时候多包一层data?谢谢~
大家好!我现在输出的json格式是这样子的
{
"total": 0,
"pages": 0,
"size": 0,
"page": 1,
"data": [
{
"id": "6",
"created_at": "2021-09-04T17:34:05.000Z",
"updated_at": "2022-02-25T09:48:41.000Z",
"title": "启动界面视频广告",
"icon": "assets/splash_ad.mp4",
"uri": "/courses",
"style": 10,
"position": 10,
"sort": 1000,
"user_id": "1417780635407372289"
},
{
"id": "5",
"created_at": "2021-09-04T17:34:05.000Z",
"updated_at": "2022-02-25T09:48:41.000Z",
"title": "启动界面图片广告",
"icon": "assets/splash_ad.png",
"uri": "/books",
"style": 0,
"position": 10,
"sort": 900,
"user_id": "1417780635407372289"
}
]
}
代码如下,
控制器代码
public function getBraceCaseCommentList($case_id)
{
$brace_case_comments = BraceCaseComment::where('case_id', $case_id)->orderBy('id', 'desc')->paginate(10);
return ResourcesBraceCaseComment::collection($brace_case_comments);
}
资源包裹代码
<?php
namespace App\Http\Resources;
use Illuminate\Http\Resources\Json\JsonResource;
class PreHomeDoing extends JsonResource
{
/**
* Transform the resource collection into an array.
*
* @param \Illuminate\Http\Request $request
* @return array
*/
public function toArray($request)
{
$data = parent::toArray($request);
$data['image_url'] = optional($this->pre_home_doing_image)->url;
$data['nickname'] = $this->yt_user->nickname;
$data['headimgurl'] = $this->yt_user->headimgurl;
return $data;
}
}
但是公司和前端都要求加一层data,
json格式如下:
{
"data": {
"total": 0,
"pages": 0,
"size": 0,
"page": 1,
"data": [
{
"id": "6",
"created_at": "2021-09-04T17:34:05.000Z",
"updated_at": "2022-02-25T09:48:41.000Z",
"title": "启动界面视频广告",
"icon": "assets/splash_ad.mp4",
"uri": "/courses",
"style": 10,
"position": 10,
"sort": 1000,
"user_id": "1417780635407372289"
},
{
"id": "5",
"created_at": "2021-09-04T17:34:05.000Z",
"updated_at": "2022-02-25T09:48:41.000Z",
"title": "启动界面图片广告",
"icon": "assets/splash_ad.png",
"uri": "/books",
"style": 0,
"position": 10,
"sort": 900,
"user_id": "1417780635407372289"
}
]
},
"status": 0
}
请问一下大家,外边的这层data,怎么加上去的?谢谢祝大家新年快乐
我是这样子写的。
想要什么格式都可以自定义的。
分页的可以是这样
API 资源《Laravel 9 中文文档》 看手册
这样:
自己封装统一返回格式就好了。
我是封装个类似
BaseController
,里面封装统一的接口返回相应returnData
是helper封装的方法最终控制器继承
BaseController
就可以直接使用了是这样吗?
这什么奇葩需求,搞得有点像 GraphQL
试试上面的代码。
BaseResourceCollection.php
CustomPaginatedResourceResponse.php
在资源那个文章内有提到data 包裹方式,我们这边的实现可参考
自定义一个 respondUtil 不就好了..
以下代码可以实现您的需求:
如果上面的代码不行,可以用下面的:
用这个方法解决了,感谢大家