2016-05-22 11 views
0

Gerade jetzt habe ich ein seltsames Problem. Vor kurzem habe ich mit der Entwicklung von Symfony 2.8 begonnen. Um in diesem Rahmen zu lernen, habe ich ein eigenes Projekt mit einer API erstellt. Alles funktioniert, bis ich eine Route mit einem Kriterium konfrontiert.Symfony 2.8 SyliusRecourceBundle Routing Kriterien

Nach der documentation muss ich nur "Kriterien" in der Routendatei hinzufügen. Aber es zeigt keinen Unterschied. Aber wenn ich auch ein "Limit" hinzufüge. Dann funktioniert es.

Die Strecke Datei (A und B ist fake):

api_A_B: 
path: /A/{id}/B 
methods: [GET] 
defaults: 
    _controller: api.controller.B:indexAction 
    _sylius: 
    paginate: false 
    #limit: 900 #WHY? 
    criteria: 
     A: $id 

las ich etwas über „filterbar: true“, aber das war vor Alter und es ist nicht in der Dokumentation.

Abfrageantwort mit Limit:

FROM 
    B t0 
WHERE 
    t0.A_id = ? 
LIMIT 
    900 

Abfrageantwort ohne Limit:

FROM 
    B t0 

Antwort

1

Dies ist ein Fehler in der Standard-Sylius Ressource Resolver, ignoriert es Kriterien und Sortieren, wenn Sie nicht Paginieren oder limit ist nicht festgelegt. Um dies zu beheben, sollten Sie den Parameter sylius.resource_controller.resources_resolver.class überschreiben und die folgende Implementierung für die Methode getResources verwenden:

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