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

API Platform Symfony : Only getting 30 results (pagination)

我正在使用带有 Angular 客户端的 Symfony API。尝试从 table 报价中获取数据时,当我想获取所有内容时,最多只能获得 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;
    }

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

    'api_platform.eager_loading.max_joins' => 30, 
    'api_platform.collection.pagination.items_per_page' => 30,

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

api_platform:
    swagger:
        api_keys:
            apiKey:
                name: Authorization
                type: header
    mapping:
        paths: ['%kernel.project_dir%/src/Entity']

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

API 平台有 pagination.

如您所料,默认值为 30。

API Platform Core has native support for paged collections. Pagination is enabled by default for all collections. Each collections contains 30 items per page.

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

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

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

From the documentation:

全局禁用分页

# api/config/packages/api_platform.yaml
api_platform:
    defaults:
        pagination_enabled: false

禁用特定资源的分页

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

use ApiPlatform\Core\Annotation\ApiResource;

/**
 * @ApiResource(attributes={"pagination_enabled"=false})
 */
class Quotation
{
    // ...
}

You could also let the client decide.

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

全局更改每页的项目数

# api/config/packages/api_platform.yaml
api_platform:
    defaults:
        pagination_items_per_page: 100 # Default value

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

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

use ApiPlatform\Core\Annotation\ApiResource;

/**
 * @ApiResource(attributes={"pagination_items_per_page"=100})
 */
class Quotation
{
    // ...
}

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