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_Adpater_Iteratorが実装するZend_Paginator_Adapter_Interfaceを取ることができます。現在、Zend_Paginator_Adapter_Iteratorのコンストラクターは\Iteratorインターフェースを取ります。この\Iteratorは\Countableも実装する必要があります ( Zend_Paginator_Adapter_Iteratorのコンストラクタを見ればわかります)。Paginator ::getIterator()メソッドは\ArrayIteratorを返すため、定義上、それは法案に適合します ( \ArrayIteratorは\Iteratorと\Countableの両方を実装しているため)。
Doctrine 1 から Doctrine への「Zend Framework: A Beginner's Guide」のコードの Doctrine 1 から Docrine 2 への移植を参照してください: https://github.com/kkruecke/zf-beginners-doctrine2。Doctrine 2' Doctrine\ORM\Tools\Pagination\PaginatorでZend_Paginator_Adapter_Iteratorを使用してZend_Paginatorでページネーションするためのコードが含まれています。
コードはここにあります (ただし、最新の DoctrineORM 2.2 ですべてが機能するとは限りません) が、例は有効です: https://github.com/kkruecke/zf-beginners-doctrine2/tree/master/ch7