Вам не нужно реализовывать Zend_Paginator_Adapter_Interface. Он уже реализован с помощью Zend_Paginator_Adapter_Iterator.
Вы можете просто передать Paginator Doctrines в 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 и \Countable).
См. этот перенос кода Zend Framework с Doctrine 1 на Doctrine 2: Руководство для начинающих с Doctrine 1 на Doctrine: https://github.com/kkruecke/zf-beginners-doctrine2. Он включает код для разбиения на страницы с помощью Zend_Paginator с использованием Zend_Paginator_Adapter_Iterator с Doctrine 2' Doctrine\ORM\Tools\Pagination\Paginator.
Код находится здесь (хотя он может не работать с последней версией DoctrineORM 2.2), но пример действителен: https://github.com/kkruecke/zf-beginners-doctrine2/tree/master/ch7
person
Kurt Krueckeberg
schedule
17.02.2012