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

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

包裹的那层类似这样:

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

我猜测是因为:

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

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

《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
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),
5年前 评论

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