API 资源分页的问题(万分感谢)

在写API时,使用了 resource 但遇到了一点小问题。
在http状态码基础上,我和前端约定了业务相关的状态码,当涉及到分页时使用 Resource::collection() 处理数据,这层业务状态码的包裹,会导致分页结果的消失。

包裹的那层类似这样:

response()->json([
    'code' => 200,
    'messsage' => 'success',
    'data' => Resource::collection($data),
    ...
]);

我猜测是因为:

包裹嵌套资源
你可以完全自由地决定资源关联如何被包裹。如果你希望无论怎样嵌套,都将所有资源集合包裹在 data 键中,那么你需要为每个资源都定义一个资源集合类,并将返回的集合包裹在 data 键中。
当然,你可能会担心这样顶层资源将会被包裹在两个 data 键中。请放心, Laravel 将永远不会让你的资源被双层包裹,因此你不必担心被转换的资源集合会被多重嵌套。

但我暂时并没有想到如何去解决该问题。

《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
Epona
最佳答案

可以试试

$result = Model::paginate();

return Resource::collection($result)->additional([
    'code' => 200,
    'message' => $message
]);
4年前 评论
manen (楼主) 4年前
讨论数量: 2
Epona

可以试试

$result = Model::paginate();

return Resource::collection($result)->additional([
    'code' => 200,
    'message' => $message
]);
4年前 评论
manen (楼主) 4年前

@Epona
这个最后效果是

'data' => Resource::collection($data),
'code' => 200,
'messsage' => 'success',

有没有办法让他变为

'code' => 200,
'messsage' => 'success',
'data' => Resource::collection($data),
3年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!