如何删除 Laravel 分页响应的元对象中的链接?
Posted
技术标签:
【中文标题】如何删除 Laravel 分页响应的元对象中的链接?【英文标题】:How to remove links in the meta object of Laravel paginate response? 【发布时间】:2021-06-07 09:36:51 【问题描述】:Laravel 默认分页给了我默认分页格式的响应,但我想在页面响应中删除元对象中的链接
我使用下面的代码来获取页面数据:
public function index()
return response()->json(
new EntityCollection(Entity::paginate($pageSize))
);
它在我的代码中调用 EntityCollection 的资源集合中返回响应。但我想在响应中删除元数据中的链接。
EntityCollection 看起来像这样:
<?php
namespace App\Http\Resources;
use Illuminate\Http\Resources\Json\ResourceCollection;
class EntityCollection extends ResourceCollection
/**
* Transform the resource collection into an array.
*
* @param \Illuminate\Http\Request $request
* @return array
*/
public function toArray($request)
return [
'data' => $this->collection,
];
当我使用 EntityCollection 获取列表时,它返回以下格式响应:
"data": [
// data
],
"links":
"first": "*url?page_size=1&page=1",
"last": "*url?page_size=1&page=15",
"prev": null,
"next": "*url?page_size=1&page=2"
,
"meta":
"current_page": 1,
"from": 1,
"last_page": 15,
"links": [
"url": null,
"label": "pagination.previous",
"active": false
,
"url": "*url?page_size=1&page=6",
"label": 6,
"active": false
],
"path": "*url",
"per_page": "1",
"to": 1,
"total": 15
请给我在元数据中删除链接的方法或在 Laravel 中自定义分页响应的最佳实践。
【问题讨论】:
查看***.com/questions/48094741/… 【参考方案1】:我在尝试做同样的事情时遇到了这个问题。使用 Laravel 8,您似乎可以做到这一点,但您不能使用资源集合。您只需使用您创建的资源类。所以,在你的情况下,你使用EntityResource
而不是EntityCollection
示例如下:
$results = EntityResource::collection(Entity::paginate($pageSize));
return response()->json([
'data' => $results,
'lastPage' => $results->lastPage()
]);
使用这种方法,您实际上是自己构建元数据。你可以参考 Laravel 的分页文档,看看还有哪些其他方法可用于构建你自己的元数据。
https://laravel.com/docs/8.x/pagination
【讨论】:
【参考方案2】:这里的问题是ResourceCollection
覆盖了您的自定义响应结构并添加了一些额外的属性here。您可以通过覆盖 toResponse()
方法来修复此(损坏的 IMO)行为,如下所示:
/**
* @inheritdoc
*/
public function toResponse($request)
return JsonResource::toResponse($request);
【讨论】:
以上是关于如何删除 Laravel 分页响应的元对象中的链接?的主要内容,如果未能解决你的问题,请参考以下文章
如何从 Laravel 中的响应 JSON 中删除 HTML 标签 [关闭]