Sin*_*hti 6 php pagination zend-framework zend-paginator doctrine-orm
我想在zend_paginator中使用doctrine
这里有一些示例查询:
$ allArticleObj = $ this - > _ em-> getRepository('Articles'); $ qb = $ this - > _ em-> createQueryBuilder();
Run Code Online (Sandbox Code Playgroud)$qb->add('select', 'a') ->add('from', 'Articles a') ->setFirstResult(0) ->setMaxResults(5);
是否有任何示例代码显示我们可以为doctrine 2查询构建器编写zend_paginator适配器?
您不需要实现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
}
Run Code Online (Sandbox Code Playgroud)
然后你就像普通人一样在视图脚本中使用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).
从Doctrine 1到Doctrine的"Zend Framework:A Beginner's Guide"代码中,参见Doctrine 1到Docrine 2的端口:https: //github.com/kkruecke/zf-beginners-doctrine2.它包括使用Zend_Paginator_Adapter_Iterator和Doctrine 2'Desstrine \ ORM\Tools\Pagination\Paginator与Zend_Paginator进行分页的代码.
代码在这里(虽然它可能不适用于最新的DoctrineORM 2.2),但该示例是有效的:https://github.com/kkruecke/zf-beginners-doctrine2/tree/master/ch7
当然,结果是您必须实现Zend_Paginator_Adapter_Interface
,这本质上意味着实现两个方法:
count()
getItems($offset, $perPage)
您的适配器将接受 Doctrine 查询作为构造函数参数。
原则上,这getItems()
部分实际上很简单。只需将$offset
和$perPage
限制添加到查询中(就像您在示例中所做的那样)并执行查询。
实际上,这count()
件事往往很棘手。我将遵循 的示例Zend_Paginator_Adapter_DbSelect
,Zend_Db
用其Doctrine
类似物替换操作。
归档时间: |
|
查看次数: |
4629 次 |
最近记录: |