2016-05-22 102 views
0

現在我有一個奇怪的問題。最近我開始在Symfony 2.8中開發。爲了學習這個框架,我使用API​​製作了一個自己的項目。一切工作,直到我面臨一條準則的路線。Symfony 2.8 SyliusRecourceBundle路由標準

根據documentation我只需要在路徑文件中添加「標準」。但它沒有顯示任何差異。但是當我添加「限制」時。然後它正在工作。

路由文件(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 

我讀到一些關於「過濾:真正的」但那是很久以前的事,這是不是文檔。與限

查詢響應:無極限

FROM 
    B t0 
WHERE 
    t0.A_id = ? 
LIMIT 
    900 

查詢響應:

FROM 
    B t0 

回答

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()); 
}