6

zend_paginatorで教義を使いたい

ここにいくつかのクエリ例があります:

$ allArticleObj = $ this-> _ em-> getRepository('Articles'); $ qb = $ this-> _ em-> createQueryBuilder();

    $qb->add('select', 'a')
            ->add('from', 'Articles a')
            ->setFirstResult(0)
            ->setMaxResults(5);

doctrine 2クエリビルダー用のzend_paginatorアダプターを記述できることを示すサンプルコードはありますか?

4

4 に答える 4

8

Zend_Paginator_Adapter_Interfaceを実装する必要はありません。Zend_Paginator_Adapter_Iteratorによって既に実装されています。

Doctrines のPaginatorZend_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

于 2012-02-17T19:16:36.670 に答える
1

変更してください

use Doctrine\ORM\Tools\Pagination as Paginator;

use Doctrine\ORM\Tools\Pagination\Paginator as Paginator;
于 2012-02-29T08:54:44.817 に答える
1

もちろん、結果として、 を実装する必要がありますZend_Paginator_Adapter_Interface。これは、基本的に 2 つのメソッドを実装することを意味します。

count()

getItems($offset, $perPage)

アダプターは、Doctrine クエリをコンストラクター引数として受け入れます。

原則として、このgetItems()部分は実際には簡単です。$offsetサンプルで行っているように、クエリにとの制限を追加し$perPageて、クエリを実行します。

実際には、count()扱いにくい傾向があるのはビジネスです。の例に従い、操作を類似Zend_Paginator_Adapter_DbSelectのものに置き換えます。Zend_DbDoctrine

于 2011-07-10T05:14:01.410 に答える