में परिणामों को सीमित करें मैंने अपग्रेडिटी के साथ एक कोड कनेक्ट एपीआई बनाया है। अभी के लिए मैं मानक बनाने स्टब्स का उपयोग कर रहा हूँ। मेरे PostResource
में fetchAll($params = array())
नामक एक विधि है। इतना है कि यह परिणामों के एक paginatable सेट रिटर्न मैं विधि के लिए कोड बनाया:अपरिहार्यता
/** @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));
यह ठीक अब तक काम करता है। अगर मैं एपीआई यूआरएल पर नेविगेट करता हूं तो मुझे अपने डीबी डेटा का एक अंकनित json
का प्रतिनिधित्व मिलेगा। अगर मैं अपने एपीआई के लिए पृष्ठ आकार 5 पर सेट करता हूं तो यह मुझे 2 पेज और 5 परिणाम देगा। अब तक सब ठीक है। समस्या यह है कि प्रत्येक कॉल (पृष्ठ 1 या पृष्ठ 2) पर सभी 10 परिणाम डीबी से प्राप्त किए जाएंगे। यह केवल एक पृष्ठ पर 5 लौटाता है लेकिन 10 हाइड्रेटेड इत्यादि हैं।
क्या सीमा का उपयोग करने का कोई तरीका है लेकिन अपग्रेडिटी या पेजिनेटर को यह भी पता है कि कुल में कितने परिणाम हैं ताकि मुझे 5 पंक्तियां मिलें और अभी भी अंकन?
शायद पर एक नज़र 'डीबी चयन करें 'पेजिनेटर एडाप्टर? -> http://framework.zend.com/manual/current/en/modules/zend.paginator.usage.html#the-dbselect-adapter – Crisp
डिफ़ॉल्ट संग्रह से 'ज़ेंड \ पेजिनेटर \ पेजिनेटर' बढ़ाएं, इसलिए यदि आप मानक स्टब्स का उपयोग कर रहे हैं, जो व्यवहार आप वर्णन कर रहे हैं वह प्रकट नहीं होना चाहिए। आपकी कॉल श्रृंखला कैसी दिखती है? इस तरह: 'FooResource # fetchAll (...) -> FooService # getBar (...) -> FooMapper # findAll (...) '? क्या 'FooMapper # findAll (...)' एक 'FooCollection' वापस करता है? 'findAll ($ params = array()) { \t $ select = $ this-> getSelect(); \t $ चयन-> जहां (...); \t $ पेजिनेटर एडाप्टर = $ यह-> createPaginationAdapter ($ select); \t $ संग्रह = नया FooCollection ($ paginatorAdapter); \t $ संग्रह वापसी; } ' – automatix