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.
所以你有多项选择来解决你的问题。
- 客户端应使用您的分页。因此,您的后端无需更改,只需在查看您的报价单时查询一个页面即可。
否则,您可以更新配置以禁用分页。
全局禁用分页
# 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。
我正在使用带有 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.
所以你有多项选择来解决你的问题。
- 客户端应使用您的分页。因此,您的后端无需更改,只需在查看您的报价单时查询一个页面即可。
否则,您可以更新配置以禁用分页。
全局禁用分页
# 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。