Вам не нужно реализовывать Zend_Paginator_Adapter_Interface . Это уже реализовано Zend_Paginator_Adapter_Iterator .
Вы можете просто передать Doctrines Paginator в Zend_Paginator_Adapter_Iterator , который вы передадите в Zend_Paginator . Затем вы вызываете Zend_Paginator :: setItemCountPerPage ($ perPage) и Zend_Paginator :: setCurrentPageNumber ($ current_page) . Как это:
use Doctrine\ORM\Tools\Pagination as Paginator; // goes at top of file
SomeController::someAction()
{
$dql = "SELECT s, c FROM Square\Entity\StampItem s JOIN s.country c ".' ORDER BY '. $orderBy . ' ' . $dir;
$query = $this->getEntityManager()->createQuery($dql);
$d2_paginator = new Paginator($query); \\
$d2_paginator_iter = $d2_paginator->getIterator(); // returns \ArrayIterator object
$adapter = new \Zend_Paginator_Adapter_Iterator($d2_paginator_iter);
$zend_paginator = new \Zend_Paginator($adapter);
$zend_paginator->setItemCountPerPage($perPage)
->setCurrentPageNumber($current_page);
$this->view->paginator = $zend_paginator; //Then in your view, use it just like your currently use
}
Затем вы используете paginator в скрипте вида, как обычно.
Пояснение:
Zend_Paginator * Конструктор может принимать Zend_Paginator_Adapter_Interface , который реализует Zend_Paginator_Adpater_Iterator . Теперь конструктор Zend_Paginator_Adapter_Iterator принимает интерфейс \ Iterator . Этот \ Iterator также должен реализовывать \ Countable (как вы можете увидеть, посмотрев конструктор Zend_Paginator_Adapter_Iterator ). Поскольку метод Paginator :: getIterator () возвращает \ ArrayIterator , он по определению соответствует требованиям (так как \ ArrayIterator реализует оба \ Iterator и \ Счетный ).
См. Этот порт из Doctrine 1 в Docrine 2 кода для «Zend Framework: Руководство для начинающих» из Doctrine 1 в Doctrine: https://github.com/kkruecke/zf-beginners-doctrine2. Включает код для разбивки на страницы с Zend_Paginator с использованием Zend_Paginator_Adapter_Iterator с Doctrine 2 ' Doctrine \ ORM \ Инструменты \ Пагинация \ Paginator .
Код здесь (хотя он может работать не с последней версией DoctrineORM 2.2), но пример действителен: https://github.com/kkruecke/zf-beginners-doctrine2/tree/master/ch7