首页 > 解决方案 > 有没有办法使用 ApiPlatform 分页来获取总项目?

问题描述

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

bootstrap-vue 分页组件需要一个 total-row 属性来获取总页数(基于每页的项目)/resource GET响应返回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 文档,我还应该收到一个hydra:view对象,其中包含关于下一个、上一个和最后一个项目的信息,只是在服务器上使用其默认值启用分页,但它不在响应中。

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

标签: symfonypaginationbootstrap-vueapi-platform.com

解决方案


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

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

了解如何使用 Symfony 文档Querying for Objects: The Repository来实现这一点


推荐阅读