Laravel默认分页给我的响应与默认格式的分页,但我想删除链接 meta对象在页面响应
我使用下面的代码获取页面数据:
public function index()
{
return response()->json(
new EntityCollection(Entity::paginate($pageSize))
);
}
它返回资源集合中的响应,我在代码中调用了EntityCollection。但我想删除在回应 meta中的链接。
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
}
}
请给予我的方式来删除 meta或最佳实践,以自定义分页在Laravel的响应。
5条答案
按热度按时间sycxhyv71#
我的解决方案:
在控制器上。
结果:
dxxyhpgq2#
通过从您自己的集合EntityCollection创建此方法很简单:
a11xaf1n3#
这里的问题是
ResourceCollection
覆盖了您的自定义响应结构,并在这里添加了一些额外的属性。你可以通过重写toResponse()
方法来修复这个(损坏的IMO)行为,如下所示:8mmmxcuj4#
我在试图做同样的事情时遇到了这个问题。在Laravel 8中,你似乎可以做到这一点,但你不能使用资源集合。您只需使用您创建的资源类。因此,在您的示例中,使用的不是
EntityCollection
,而是EntityResource
样品如下:
使用这种方法,您实际上是自己构建元数据。你可以参考Laravel的分页文档,看看还有哪些方法可以用来构建你自己的元数据。
https://laravel.com/docs/8.x/pagination
hfsqlsce5#
这对我来说一直是一个PIA。
您将找到的建议/答案将涉及创建多个集合,如果您使用错误的
paginate
方法,可能会出现未定义的键等。我喜欢做的事情很简单,我在Eloquent Builder中添加了一个函数,所以你可以只做
jsonPaginate()
。app/Providers/AppServiceProvider.php
现在你可以像这样使用它:
备注:
$this
时绕过Intelephense错误。meta
键中,另一个是删除不需要的键,您可以按照自己的方式进行自定义。