【问题标题】:how to change paginate response?如何更改分页响应?
【发布时间】:2021-06-18 06:30:15
【问题描述】:

在 Laravel 中,无法替换分页响应的默认结构。这是我想要实现的结构:

return response()->json([
    'data' => $items->items()
    'meta' => [
        'current_page'   =>   $items->currentPage(),
        'from'           =>   $items->firstItem(),
        'last_page'      =>   $items->lastPage(),
        'per_page'       =>   $items->perPage(),
        'to'             =>   $items->lastItem(),
        'total'          =>   $items->total(),
    ];
]);

【问题讨论】:

  • 现在代码中的任何错误

标签: php laravel lumen


【解决方案1】:

我之前用resource collection 解决了这个问题。 Laravel 不支持开箱即用,因此需要做一些工作。

首先,您必须重写 App\Http\Resources\PaginatedResourceResponse 类,这是呈现分页响应的默认方式。然后可以覆盖返回的分页数据的默认结构。

class CustomPaginatedResourceResponse extends PaginatedResourceResponse
{
}

然后请创建一个使用自定义分页资源的资源集合。

class ItemsResource extends ResourceCollection
{
    public function toArray($request)
    {
    }

    // Override the toResponse method.
    public function toResponse($request)
    {
        return $this->resource instanceof AbstractPaginator
            ? (new CustomPaginatedResourceResponse($this))->toResponse($request)
            : parent::toResponse($request);
    }
}

最后,您可以在控制器中简单地使用ItemsResource

return new ItemsResource($items);

这需要了解api资源和源代码。请花一些时间阅读docs 并弄清楚App\Http\Resources\PaginatedResourceResponse 是如何使用的。

【讨论】:

    猜你喜欢
    • 2017-07-30
    • 1970-01-01
    • 2018-12-07
    • 2019-06-03
    • 1970-01-01
    • 2020-07-02
    • 2022-01-23
    • 2020-06-23
    • 1970-01-01
    相关资源
    最近更新 更多