【问题标题】:Unable to get ZF2 pagination无法获得 ZF2 分页
【发布时间】:2014-02-20 12:48:39
【问题描述】:

我已经在下面给出的控制器中编写了代码,

$iteratorAdapter  = new \Zend\Paginator\Adapter\Iterator($this->getCategoryTable()->listCategoryData());
$paginatorDatas = new \Zend\Paginator\Paginator($iteratorAdapter);
$paginatorDatas->setCurrentPageNumber($page)->setItemCountPerPage(5); 

然后我渲染变量 $paginatorDatas 来查看文件。

在对应的视图文件中,我写了这样的代码,

echo $this->paginationControl($this->paginatorDatas, 'Elastic', 'paginator.phtml');

在调用 $this->paginationControl() 函数之前,我已经通过 foreach(){} 迭代了数组对象 ($paginatorDatas) 以填充记录。

但上面的代码给出了以下错误,

致命错误:未捕获的异常 'Zend\Db\Adapter\Exception\RuntimeException' 并在 /var/www/cp/ 中显示消息“此结果是仅向前的结果集,不支持向前移动后调用 rewind()”供应商/zendframework/zendframework/library/Zend/Db/Adapter/Driver/Pdo/Result.php:153 堆栈跟踪:#0 [内部函数]:Zend\Db\Adapter\Driver\Pdo\Result->rewind()# 1 /var/www/cp/module/Admin/view/admin/category/ajax-list.phtml(21): LimitIterator->rewind() #2 /var/www/cp/vendor/zendframework/zendframework/library/ Zend/View/Renderer/PhpRenderer.php(507): include('/var/www/cp/mod...') #3 /var/www/cp/vendor/zendframework/zendframework/library/Zend/View/ View.php(205): Zend\View\Renderer\PhpRenderer->render(Object(Zend\View\Model\ViewModel)) #4 /var/www/cp/vendor/zendframework/zendframework/library/Zend/Mvc/ View/Http/DefaultRenderingStrategy.php(102): Zend\View\View->render(Object(Zend\View\Model\ViewModel)) #5【内部函数】: Zend\Mvc\View\Http\DefaultRenderingStrategy->render (OB ject(Zend\Mvc\MvcEvent)) #6 /var/www/cp/ in /var/www/cp/vendor/zendframework/zendframework/library/Zend/Db/Adapter/Driver/Pdo/Result.php 在第 153 行

请帮帮我....

【问题讨论】:

    标签: zend-framework2


    【解决方案1】:

    方法一

    $resultSet = $this->getCategoryTable()->listCategoryData();
    $resultSet->buffer();
    $resultSet->next();
    $iteratorAdapter  = new \Zend\Paginator\Adapter\Iterator($resultSet);
    $paginatorDatas = new \Zend\Paginator\Paginator($iteratorAdapter);
    $paginatorDatas->setCurrentPageNumber($page)->setItemCountPerPage(5);
    

    来自this Samsonasik 的教程

    方法二

    $resultSet = $this->getCategoryTable()->listCategoryData();
    $resultSet = iterator_to_array($resultSet);
    $adapter  = new \Zend\Paginator\Adapter\ArrayAdapter($resultSet);
    $paginatorDatas = new \Zend\Paginator\Paginator($adapter);
    $paginatorDatas->setCurrentPageNumber($page)->setItemCountPerPage(5);
    

    【讨论】:

    • @EKL 然后,考虑接受并支持这个答案!
    【解决方案2】:

    用您的查询结果填充一个数组,您可以使用\Zend\Paginator\Adapter\ArrayAdapter 而不是\Zend\Paginator\Adapter\Iterator

    【讨论】:

    • 我尝试了这种方法,但仍然出现以下错误...可捕获的致命错误:参数 1 传递给 Zend\Paginator\Adapter\ArrayAdapter::__construct() 必须是一个数组,给定对象,在第 74 行的 /var/www/cp/module/Admin/src/Admin/Controller/CategoryController.php 中调用并在 /var/www/cp/vendor/zendframework/zendframework/library/Zend/Paginator/Adapter/ 中定义第 33 行的 ArrayAdapter.php
    • 这就是为什么我说用你的查询结果填充一个数组,而不是直接使用它。 ;)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-25
    相关资源
    最近更新 更多