Вам не нужно реализовывать Zend_Paginator_Adapter_Interface , так как он уже реализован Zend_Paginator_Adapter_Iterator .
Вместо этого вы можете просто передать Paginator в Doctrine Zend_Paginator_Adapter_Iterator следующим образом:
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;
}
Затем вы используете paginator в скрипте вида, как обычноdo.
Объяснение:
Конструктор 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 и \ Countable ).
См. Этот порт из Учения 1 в Учение 2 кода для «Zend Framework: Руководство для начинающих» из Учения 1 в Учение: https://github.com/kkruecke/zf-beginners-doctrine2. Включает код для разбивки на страницы с Zend_Paginator с использованием Zend_Paginator_Adapter_Iterator с Doctrine 2 ' Doctrine \ ORM \ Tools \ Pagination \ Paginator .
.