如何删除 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 标签 [关闭]

附加到 Laravel 中的分页链接 URL

为 ajax 响应自定义 DataTables 分页

Laravel分页链接设计问题[关闭]

如何使用 bootstrap 4 默认分页样式获得 laravel 分页链接?

如何从 laravel 分页的第一页中删除查询字符串页面?