Stworzyłem kod połączony API z Apigility. Na razie używam standardowych kodów pośredniczących. W moim PostResource
znajduje się metoda o nazwie fetchAll($params = array())
. Stworzyłem kod metody tak, że zwraca paginatable zestaw wyników:Ogranicz wyniki w Apilility
/** @var HydratorInterface $hydrator */
$hydrator = new \Zend\Stdlib\Hydrator\ClassMethods();
/** @var PostService $postService */
$postService = new PostService();
$posts = $postService->findAll(/* Limit, default 10 */);
$apiData = array();
foreach ($posts as $post) {
$apiData[] = $hydrator->extract($post);
}
return new Paginator(new ArrayAdapter($apiData));
to działa prawidłowo tak daleko. Jeśli przejdę do adresu API interfejsu API, otrzymam podzieloną na paginację json
reprezentację moich danych DB. Jeśli ustawię rozmiar strony dla mojego API na 5. Da mi to 2 strony i 5 wyników. Jak na razie dobrze. Problem polega na tym, że przy każdym wywołaniu (strona 1 lub strona 2) wszystkie 10 wyników zostanie pobranych z DB. Zwraca tylko 5 na jednej stronie, ale 10 jest nawodnionych itd.
Czy istnieje sposób na wykorzystanie limitu, ale również powiadomienie Apigility lub paginatora, ile wyników jest w sumie tak, że otrzymam 5 wierszy i nadal paginacja?
Może spojrzeć Pod 'Adapter paginatora' DbSelect'? -> http://framework.zend.com/manual/current/en/modules/zend.paginator.usage.html#the-dbselect-adapter – Crisp
Domyślnie kolekcje rozszerzają 'Zend \ Paginator \ Paginator', więc jeśli Używasz standardowych skrótów, zachowanie, które opisujesz, nie powinno się wyświetlać. Jak wygląda twój łańcuch połączeń? W ten sposób: 'FooResource # fetchAll (...) -> FooService # getBar (...) -> FooMapper # findAll (...)'? Czy 'FooMapper # findAll (...)' zwraca 'FooCollection'? 'findAll ($ params = array()) { \t $ select = $ this-> getSelect(); \t $ select-> where (...); \t $ paginatorAdapter = $ this-> createPaginationAdapter ($ select); \t $ collection = new FooCollection ($ paginatorAdapter); \t return $ kolekcja; } ' – automatix