API Platform Symfony:仅获得 30 个结果(分页)

Mis*_*rin 5 api symfony api-platform.com

我正在将 Symfony API 与 Angular 客户端结合使用。当尝试从报价表中获取数据时,当我想要获取所有内容时,最多只能得到 30 个结果。我在 API 上使用 Sellsy。在 SellsyService.php 中,我猜想当我尝试获取报价时会调用此函数:

public function getQuotations()
    {
        $devisRequest = array(
            'method' => 'Document.getList',
            'params' => array(
                'doctype' => "estimate",
                'pagination' => array(
                    'nbperpage' => 4999,
                ),
                'search' => array(
                    //'steps' => ['sent','accepted']
                    'steps' => explode(
                        ",",
                        "draft,due,payinprogress,paid,late,sent,read,accepted,contested,expired,advanced,partialinvoiced,invoiced,stored,spent,partialspend,refused"
                    ),
                ),
            ),
        );
        $devislist = $this->sellsy->requestApi($devisRequest);

        return $devislist;
    }
Run Code Online (Sandbox Code Playgroud)

我真的不知道去哪里找,我没有开发这个API。当在项目中查找“30”时,我可以在缓存中看到:

    'api_platform.eager_loading.max_joins' => 30, 
    'api_platform.collection.pagination.items_per_page' => 30,
Run Code Online (Sandbox Code Playgroud)

不知道跟我的问题有没有关系。这是配置 api_platform.yaml:

api_platform:
    swagger:
        api_keys:
            apiKey:
                name: Authorization
                type: header
    mapping:
        paths: ['%kernel.project_dir%/src/Entity']
Run Code Online (Sandbox Code Playgroud)

我应该在哪里设置这个 30 的限制?

Dyl*_*Kas 10

API平台有分页功能。

正如您所猜到的,默认情况下它是 30。

API Platform Core 对分页集合提供本机支持。默认情况下,所有集合都启用分页。每个集合每页包含 30 个项目。

所以你有多种选择来解决你的问题。

  1. 客户端应该使用您的分页。因此,您的后端无需进行任何更改,只需在查看报价时查询页面即可。

否则,您可以更新配置以禁用分页。

从文档中:

全局禁用分页

# api/config/packages/api_platform.yaml
api_platform:
    defaults:
        pagination_enabled: false
Run Code Online (Sandbox Code Playgroud)

禁用特定资源的分页

<?php
// api/src/Entity/Quotation.php

use ApiPlatform\Core\Annotation\ApiResource;

/**
 * @ApiResource(attributes={"pagination_enabled"=false})
 */
class Quotation
{
    // ...
}
Run Code Online (Sandbox Code Playgroud)

您也可以让客户决定。

或者,如果您不想禁用它,但增加每页的项目数:

全局更改每页的项目数

# api/config/packages/api_platform.yaml
api_platform:
    defaults:
        pagination_items_per_page: 100 # Default value
Run Code Online (Sandbox Code Playgroud)

更改特定资源的每页项目数

<?php
// api/src/Entity/Quotation.php

use ApiPlatform\Core\Annotation\ApiResource;

/**
 * @ApiResource(attributes={"pagination_items_per_page"=100})
 */
class Quotation
{
    // ...
}
Run Code Online (Sandbox Code Playgroud)

您还可以执行其他操作,例如部分分页或更改客户端每页的项目数,但我建议您仅查看文档。

  • 您只是为了报价而这样做吗?您可以使用 ` * @ApiResource(attributes={"pagination_client_enabled"=true})` 仅定位此实体 (2认同)