0

现在我有一个奇怪的问题。最近我开始使用 Symfony 2.8 进行开发。为了学习这个框架,我用 API 做了一个自己的项目。一切正常,直到我面对一条带有标准的路线。

根据文档,我只需要在路由文件中添加“标准”。但它没有显示任何区别。但是当我也添加一个“限制”时。然后它正在工作。

Route 文件(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
4

1 回答 1

1

这是默认 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());
}
于 2016-05-22T11:08:29.200 回答