gpt4 book ai didi

php - 如何在yii2中设置restful api的分页?

转载 作者:行者123 更新时间:2023-12-04 14:29:28 29 4
gpt4 key购买 nike

像这样的结果

{"id":19,"iso":"BB","name":"BARBADOS","nicename":"Barbados","iso3":"BRB","numcode":52,"phonecode":1246},{"id":20,"iso":"BY","name":"BELARUS","nicename":"Belarus","iso3":"BLR","numcode":112,"phonecode":375}]
,"_links":{"self":{"href":"http://localhost/travia-api/backend/web/v1/flight/index?id=4FR996IN2F829Md&page=1"},"next":{"href":"http://localhost/travia-api/backend/web/v1/flight/index?id=4FR996IN2F829Md&page=2"},"last":{"href":"http://localhost/travia-api/backend/web/v1/flight/index?id=4FR996IN2F829Md&page=12"}},"_meta":

{"totalCount":239,"pageCount":12,"currentPage":1,"perPage":20}}

如何更改 perPage 或禁用分页???

更新!

set header content type but nothing effected!!


  X-Pagination-Per-Page: 90

-- response --
200 OK
Date: Tue, 01 Sep 2015 12:29:45 GMT
Server: Apache/2.4.10 (Win32) OpenSSL/1.0.1i PHP/5.5.19
X-Powered-By: PHP/5.5.19
X-Pagination-Total-Count: 239
X-Pagination-Page-Count: 12
X-Pagination-Current-Page: 1
X-Pagination-Per-Page: 20

Content-Length: 2421

Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Content-Type: application/json; charset=UTF-8

结果:
   {"results":           [{"id":1,"iso":"AF","name":"AFGHANISTAN","nicename":"Afghanistan","iso3":"AFG","numcode":4,"phonecode":93},
...
{"id":20,"iso":"BY","name":"BELARUS","nicename":"Belarus","iso3":"BLR","numco de":112,"phonecode":375}],_meta": {"totalCount":239,"pageCount":12,"currentPage":1,"perPage":20}}

最佳答案

我知道这个问题很老,但在整个互联网上,当使用 REST API 每页参数很简单时,我看到了很多关于实现这一点的糟糕建议。这是一个两部分的答案。

  • 如何更改 perPage 或禁用分页???

  • 首先,您必须在 url 中而不是在标题中指定页面参数。看看gridview在使用CRUD生成器时是如何改变url的。

    例如。这是一个 url,每个响应将返回 10 个项目

    http://www.example.com?per-page=10

    此网址将返回 50

    http://www.example.com?per-page=50

    这是问题所在。默认分页最多只能达到 50。请参见此处: https://www.yiiframework.com/doc/api/2.0/yii-data-pagination# $pageSizeLimit-详细信息。如果您想要超过 50 条记录,则必须在分页中更改此参数,如下所示:
    $query = SampleModel::find();

    $dataProvider = new ActiveDataProvider([
    'query' => $query,
    'pagination' => [
    pageSizeLimit = [1, 1000]
    ]
    ]);

    现在您可以指定每页 1-1000 条记录。
  • 这不是问题的一部分,但它是相关的。既然你正在分页,你如何循环浏览页面。您将获得响应 header 以准确查看可用页面的数量。它们位于 Yii2 Rest API 提供的自定义 header 中

  • X-Pagination-Current-Page →1

    X-Pagination-Page-Count →2

    X-Pagination-Per-Page →100

    X-Pagination-Total-Count →157

    为了选择一个页面,您仍然必须在 url 中指定它。这是 157 条记录中的第 2 页,每页 30 条记录。

    http://www.example.com?page=2&per-page=30

    这是响应头:

    X-Pagination-Current-Page →2

    X-Pagination-Page-Count →6

    X-Pagination-Per-Page →30

    X-Pagination-Total-Count →157

    最后,如果您设置返回所有记录,而没有人应该这样做,您可以将 pageSizeLimit floor 设置为零,如下所示:
    $dataProvider = new ActiveDataProvider([
    'query' => $query,
    'pagination' => [
    pageSizeLimit = [0, 1000]
    ]
    ]);

    然后将每页指定为 0。

    http://www.example.com?per-page=0

    这将返回所有记录。

    这是所有记录的 header 响应

    X-Pagination-Current-Page →1

    X-Pagination-Page-Count →1

    X-Pagination-Per-Page →0

    X-Pagination-Total-Count →157

    再一次,没有人应该这样做。你应该循环分页来构建你的数组,但这是疯狂的谈话。如果您有超过一百万条记录怎么办?无论如何,这是你的项目。祝 2018 年看到这个的人好运,因为它没有在文档中完全说明。

    关于php - 如何在yii2中设置restful api的分页?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32328772/

    29 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com