在控制器如何提前获得最终包裹后的结果?

我需要自定义返回格式,在控制器中生成资源对象后,若直接返回,返回给客户端的最终结果中,如果资源单个对象会以data包裹,如果资源是集合会有data,links, meta三项。现在我需要在不返回的情况下获得这最终的结果,然后以我的格式再返回。请问要如何操作?

《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
最佳答案

可以通过如下方式实现,不过不建议这么做,建议还是通过框架提供的条件属性或者添加元数据等方式进行操作

public function index(Request $request)
{
    $posts = Post::paginate();

    $result_array = PostResource::collection($posts)->toResponse($request)->getData(true);
    // 自行处理 $result_array
    $result_array['new key'] = 'value';

    return $result_array;
}
5年前 评论
讨论数量: 6

可以通过如下方式实现,不过不建议这么做,建议还是通过框架提供的条件属性或者添加元数据等方式进行操作

public function index(Request $request)
{
    $posts = Post::paginate();

    $result_array = PostResource::collection($posts)->toResponse($request)->getData(true);
    // 自行处理 $result_array
    $result_array['new key'] = 'value';

    return $result_array;
}
5年前 评论

@FMW 其实我需要的最关键的就是这个getData()而已 :relaxed:

5年前 评论
$list = $product->paginate();
$data = $list->items();

其实这个$data就是你要的data了。

要自定义返回时这么做

        return ProductResource::collection(collect($list->items()))
            ->additional(getPaginateMeta($list));

那个getPaginateMeta()方法是helpers中自定义一个,返回你要的数组格式就好了
additional方法是api资源自带的方法。

5年前 评论

有没有优雅的方法在资源API资源中提前获得包裹后的结果 然后处理一下数据结构 最终返回呢

比如:

data:[{ id:1, name:aaa, age:18 },{ id:2, name:bbb, age:13 },{ id:3, name:ccc, age:19 } ]

我想要的是把这个变成

data:[ids:[1,2,3],names:[aaa,bbb,ccc],age:[18,13,19], datas:[{ id:1, name:aaa, age:18 },{ id:2, name:bbb, age:13 },{ id:3, name:ccc, age:19 } ]]

4年前 评论

$resource->response()->getData(true);

4年前 评论

好好看看文档,那个最佳答案我认为还不是最优雅的解决方式,Resource 这个资源类里面是支持闭包的,也就是说,你可以在Resource 这个资源类里面动态的按需加载你所需要的字段。

3年前 评论

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