Ho creato un'API connessa al codice con Apigility. Per ora sto usando gli stub di creazione standard. Nel mio PostResource
c'è un metodo chiamato fetchAll($params = array())
. ho creato il codice per il metodo in modo che restituisca un insieme paginatable di risultati:Limitare i risultati in Apigility
/** @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));
Questo funziona bene finora. Se si accede all'URL dell'API, otterrò una rappresentazione impaginata json
dei miei dati DB. Se imposto la dimensione della pagina per la mia API su 5. Mi darà 2 pagine e 5 risultati. Fin qui tutto bene. Il problema è che su ogni chiamata (pagina 1 o pagina 2) tutti i 10 risultati saranno recuperati dal DB. Restituisce solo 5 in una pagina ma 10 sono idratati ecc.
C'è un modo per usare un limite ma anche lasciare che Apigility o l'impaginatore sappiano, quanti risultati ci sono in totale in modo che io ottenga 5 righe e ancora l'impaginazione?
Forse dare un'occhiata alla Adattatore paginatore 'DbSelect'? -> http://framework.zend.com/manual/current/en/modules/zend.paginator.usage.html#the-dbselect-adapter – Crisp
Per default le collezioni estendono 'Zend \ Paginator \ Paginator', quindi se Stai usando gli stub standard, il comportamento che stai descrivendo non dovrebbe apparire. Come appare la tua catena di chiamate? In questo modo: 'FooResource # fetchAll (...) -> FooService # getBar (...) -> FooMapper # findAll (...)'? Il 'FooMapper # findAll (...)' restituisce un 'FooCollection'? 'findAll ($ params = array()) { \t $ select = $ this-> getSelect(); \t $ select-> where (...); \t $ paginatorAdapter = $ this-> createPaginationAdapter ($ select); \t $ collection = new FooCollection ($ paginatorAdapter); \t ritorno $ raccolta; } ' – automatix