Symfony 2.8 SyliusRecourceBundle 路由标准
Symfony 2.8 SyliusRecourceBundle routing criteria
现在我有一个奇怪的问题。最近我开始使用 Symfony 2.8 进行开发。为了在这个框架中学习,我用 API 做了一个自己的项目。一切正常,直到我遇到带有条件的路线。
根据documentation我只需要在路由文件中添加"criteria"。但它没有显示出任何区别。但是当我也添加 "limit" 时。然后就可以了。
路由文件(A和B是假的):
api_A_B:
path: /A/{id}/B
methods: [GET]
defaults:
_controller: api.controller.B:indexAction
_sylius:
paginate: false
#limit: 900 #WHY?
criteria:
A: $id
我读过一些关于 "filterable: true" 的内容,但那是很久以前的事了,文档中没有。
有限制的查询响应:
FROM
B t0
WHERE
t0.A_id = ?
LIMIT
900
无限制查询响应:
FROM
B t0
这是默认 Sylius 资源解析器中的错误,当您不分页或 limit
未设置时,它会忽略条件和排序。要解决这个问题,您应该重写 sylius.resource_controller.resources_resolver.class
参数并为 getResources
方法使用以下实现:
public function getResources(RequestConfiguration $requestConfiguration, RepositoryInterface $repository)
{
if (null !== $repositoryMethod = $requestConfiguration->getRepositoryMethod()) {
$callable = [$repository, $repositoryMethod];
$resources = call_user_func_array($callable, $requestConfiguration->getRepositoryArguments());
return $resources;
}
// this has changed!
if (!$requestConfiguration->isPaginated() && !$requestConfiguration->isLimited()) {
return $repository->findBy($requestConfiguration->getCriteria(), $requestConfiguration->getSorting(), $requestConfiguration->getLimit());
}
if (!$requestConfiguration->isPaginated()) {
return $repository->findBy($requestConfiguration->getCriteria(), $requestConfiguration->getSorting(), $requestConfiguration->getLimit());
}
return $repository->createPaginator($requestConfiguration->getCriteria(), $requestConfiguration->getSorting());
}
现在我有一个奇怪的问题。最近我开始使用 Symfony 2.8 进行开发。为了在这个框架中学习,我用 API 做了一个自己的项目。一切正常,直到我遇到带有条件的路线。
根据documentation我只需要在路由文件中添加"criteria"。但它没有显示出任何区别。但是当我也添加 "limit" 时。然后就可以了。
路由文件(A和B是假的):
api_A_B:
path: /A/{id}/B
methods: [GET]
defaults:
_controller: api.controller.B:indexAction
_sylius:
paginate: false
#limit: 900 #WHY?
criteria:
A: $id
我读过一些关于 "filterable: true" 的内容,但那是很久以前的事了,文档中没有。
有限制的查询响应:
FROM
B t0
WHERE
t0.A_id = ?
LIMIT
900
无限制查询响应:
FROM
B t0
这是默认 Sylius 资源解析器中的错误,当您不分页或 limit
未设置时,它会忽略条件和排序。要解决这个问题,您应该重写 sylius.resource_controller.resources_resolver.class
参数并为 getResources
方法使用以下实现:
public function getResources(RequestConfiguration $requestConfiguration, RepositoryInterface $repository)
{
if (null !== $repositoryMethod = $requestConfiguration->getRepositoryMethod()) {
$callable = [$repository, $repositoryMethod];
$resources = call_user_func_array($callable, $requestConfiguration->getRepositoryArguments());
return $resources;
}
// this has changed!
if (!$requestConfiguration->isPaginated() && !$requestConfiguration->isLimited()) {
return $repository->findBy($requestConfiguration->getCriteria(), $requestConfiguration->getSorting(), $requestConfiguration->getLimit());
}
if (!$requestConfiguration->isPaginated()) {
return $repository->findBy($requestConfiguration->getCriteria(), $requestConfiguration->getSorting(), $requestConfiguration->getLimit());
}
return $repository->createPaginator($requestConfiguration->getCriteria(), $requestConfiguration->getSorting());
}