2016-05-22 28 views
0

今私は奇妙な問題があります。最近私はSymfony 2.8で開発を始めました。このフレームワークで学ぶために、私はAPIを使って独自のプロジェクトを作成しました。私はCriteriaを持つRouteに直面するまで、すべてが機能します。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()); 
} 
関連する問題