2016-05-22 3 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()); 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^