Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/sharepoint/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Zend framework 使用分页器_Zend Framework_Zend Framework3_Zend Paginator - Fatal编程技术网

Zend framework 使用分页器

Zend framework 使用分页器,zend-framework,zend-framework3,zend-paginator,Zend Framework,Zend Framework3,Zend Paginator,我第一次使用paginator,现在我有一些关于如何和在哪里做事情的问题 下面是我的想法和一些代码 我理解了在我的控制器操作中对象paginator,将该对象提供给我的数据集合,并将其提供给我的ViewModel对象 因为我得到了一个关于ArrayAdapter的错误,我将在我的控制器类中发布错误和我的use语句 错误: 找不到类“Stammdaten\Controller\ArrayAdapter” xyzController.php use Zend\Paginator\Adapter\Ad

我第一次使用paginator,现在我有一些关于如何和在哪里做事情的问题

下面是我的想法和一些代码

我理解了在我的控制器操作中对象paginator,将该对象提供给我的数据集合,并将其提供给我的ViewModel对象

因为我得到了一个关于ArrayAdapter的错误,我将在我的控制器类中发布错误和我的use语句

错误:

找不到类“Stammdaten\Controller\ArrayAdapter”

xyzController.php

use Zend\Paginator\Adapter\AdapterInterface;
use Zend\Paginator\Paginator;
use Zend\Paginator\ScrollingStyle\Sliding;

public function indexAction()
    {
        $page  = $this->params()->fromRoute('page');
        $paginator= new Paginator(new ArrayAdapter($this->mandantTable->Ansprechpartnerjoin()->toArray()));
        $paginator->setCurrentPageNumber($page);
        $paginator->setItemCountPerPage(20);
        $paginator->setPageRange(5);
        return new ViewModel([
                      'paginator' => $paginator,
            ]);

    }
'router' => [
            'routes' => [
                'mandant' => [
                    'type'    => Segment::class,
                    'options' => [
                        'route' => '/mandant[/:action[/:id[/:page]]]',
                        'constraints' => [
                            'action' => '[a-zA-Z][a-zA-Z0-9_-]*',
                            'id'     => '[a-zA-Z0-9\-]*',
                        ],
                        'defaults' => [
                            'controller' => Controller\MandantController::class,
                            'action'     => 'index',
                        ],
                    ],
                ],

                'paginator' => [
                    'type' => 'segment',
                    'options' => [
                        'route' => '/list/[page/:page]',
                        'defaults' => [
                            'page' => 1,
                        ],
                    ],
                ],


            ],
        ],
     $page  = $this->params()->fromRoute('page');

            $countQuery = new Select();
            $countQuery
            ->from('t_mandant')
            ->columns([ DbSelect::ROW_COUNT_COLUMN_NAME => 'id' ]);

$paginator= new Paginator(new DbSelect($this->mandantTable->Ansprechpartnerjoin(),null, $countQuery));
            $paginator->setCurrentPageNumber($page);
            $paginator->setItemCountPerPage(20);
            $paginator->setPageRange(5);
            return new ViewModel([
                'paginator' => $paginator,

            ]);
这里的第一个问题:这个适配器是正确的,因为我提供了一个tableadapter集合,还是必须更改为另一个适配器

我修改了使用paginator的路由,如下所示:

 $resultSetprototype=new ResultSet();
        $resultSetprototype->setArrayObjectPrototype(new Mandant());
        $paginatorAdapter= new DbSelect($select, $this->tableGateway->getAdapter(), $resultSetprototype);
        $paginator=new Paginator($paginatorAdapter);
        return $paginator;
module.config.php

use Zend\Paginator\Adapter\AdapterInterface;
use Zend\Paginator\Paginator;
use Zend\Paginator\ScrollingStyle\Sliding;

public function indexAction()
    {
        $page  = $this->params()->fromRoute('page');
        $paginator= new Paginator(new ArrayAdapter($this->mandantTable->Ansprechpartnerjoin()->toArray()));
        $paginator->setCurrentPageNumber($page);
        $paginator->setItemCountPerPage(20);
        $paginator->setPageRange(5);
        return new ViewModel([
                      'paginator' => $paginator,
            ]);

    }
'router' => [
            'routes' => [
                'mandant' => [
                    'type'    => Segment::class,
                    'options' => [
                        'route' => '/mandant[/:action[/:id[/:page]]]',
                        'constraints' => [
                            'action' => '[a-zA-Z][a-zA-Z0-9_-]*',
                            'id'     => '[a-zA-Z0-9\-]*',
                        ],
                        'defaults' => [
                            'controller' => Controller\MandantController::class,
                            'action'     => 'index',
                        ],
                    ],
                ],

                'paginator' => [
                    'type' => 'segment',
                    'options' => [
                        'route' => '/list/[page/:page]',
                        'defaults' => [
                            'page' => 1,
                        ],
                    ],
                ],


            ],
        ],
     $page  = $this->params()->fromRoute('page');

            $countQuery = new Select();
            $countQuery
            ->from('t_mandant')
            ->columns([ DbSelect::ROW_COUNT_COLUMN_NAME => 'id' ]);

$paginator= new Paginator(new DbSelect($this->mandantTable->Ansprechpartnerjoin(),null, $countQuery));
            $paginator->setCurrentPageNumber($page);
            $paginator->setItemCountPerPage(20);
            $paginator->setPageRange(5);
            return new ViewModel([
                'paginator' => $paginator,

            ]);
这里的下一个问题:是否也需要修改MandantController的路由,或者拥有paginator路由就足够了

这里是我的viewscript的一部分,index.phtml:

foreach ($this->paginator->getCurrentItems() as $mandant) :?>
     <tr>
         <td><?= $this->escapeHtml($mandant['somefield']) ?></td>
    </tr>
<?php endforeach;

echo $this->paginator, 'Sliding', 'pagination/control', array('route' => 'mandant')
?>
错误消息:

参数1传递给Zend\Paginator\Adapter\DbSelect::\uu construct() 必须是Zend\Db\Sql\Select的实例,即 Zend\Db\ResultSet\ResultSet给定


这当然是对的,我的问题是,我必须做什么,才能将tableAdapter实例提供给paginator构造函数。

现在我换了另一种解决方案。我在模型中构造分页器

现在看起来如下所示:

 $resultSetprototype=new ResultSet();
        $resultSetprototype->setArrayObjectPrototype(new Mandant());
        $paginatorAdapter= new DbSelect($select, $this->tableGateway->getAdapter(), $resultSetprototype);
        $paginator=new Paginator($paginatorAdapter);
        return $paginator;

现在它运行得很好。

请接受您自己的答案或删除该问题。