【问题标题】:Is there a way to get total items using ApiPlatform Pagination?有没有办法使用 ApiPlatform 分页来获取总项目?
【发布时间】:2021-05-22 09:18:49
【问题描述】:

我正在尝试使用 bootstrap-vue 对表客户端进行分页。我试图分页的 api 资源实际上有 44 个项目。

bootstrap-vue 分页组件需要一个 total-row 属性来获取总页数(基于每页的项目)/resourceGET 响应返回 hydra:totalItems: 15

15 实际上是我在 App/config/packages/api_platform.yaml 配置中的默认 itemsPerPage,如下:

collection:
exists_parameter_name: 'exists'
order: 'DESC'
order_parameter_name: 'order'
pagination:
  enabled: true
  partial: true
  client_enabled: true
  client_items_per_page: true
  client_partial: true
  items_per_page: 15
  maximum_items_per_page: 100
  page_parameter_name: 'page'
  enabled_parameter_name: 'pagination'
  items_per_page_parameter_name: 'itemsPerPage'
  partial_parameter_name: 'partial'

partial=true/false 和 ?itemsPerPage=x 的结果相同。 分页本身正在工作:如果我调用 ?page=1?page=2 我得到正确的项目,但 hydra:totalItems 总是指基于 itemsPerPage 参数返回的项目。

另外,根据ApiPlatform docs,我还应该收到一个hydra:view 对象,其中包含关于下一个、上一个和最后一个项目的信息,只是在服务器上使用其默认值启用分页,但它不在响应中。

有没有办法接收分页集合和总数?
当前配置:
ApiPlatform v. 1.2.2
Symfony 5.1

【问题讨论】:

  • 使用 api 平台 2.6,我确实得到了查询结果中的总行数,与分页无关。也许你可以更新api平台? The releases page 表示“旧版本(1.x、2.0...)不再维护。如果您仍在使用它们,则必须尽快升级。”
  • 如果您的 api 返回 jsonld,您应该获得 hydra:view 对象。如果确实是您允许返回的格式配置问题(api_platform.yaml),您必须在请求中使用正确的 mime_type

标签: symfony pagination bootstrap-vue api-platform.com


【解决方案1】:

我将此问题视为业务逻辑,而不是 API 平台功能

我相信最简单的方法是在实体的对象存储库中实现一个查询,该查询计算记录总数并使用 getter 返回到您的实体的属性。

了解如何通过 Symfony 文档Querying for Objects: The Repository 实现这一目标

【讨论】:

  • 这是我的第一个想法,但是通过这种方法,我会在每个对象中得到一个 totalitems 字段,这也是有效的;但我需要它在外面
  • 数据传输对象 (DTO) 可能是您的解决方案 api-platform.com/docs/core/dto
猜你喜欢
  • 1970-01-01
  • 2021-07-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-28
  • 2020-11-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多