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

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

包裹的那层类似这样:

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

我猜测是因为:

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

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

《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
Epona
最佳答案

可以试试

$result = Model::paginate();

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

可以试试

$result = Model::paginate();

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

@Epona
这个最后效果是

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

有没有办法让他变为

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

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