如何实现Zend Framework 3 + Ajax分页?

时间:2018-10-02 17:04:01

标签: ajax zend-framework pagination doctrine zend-framework3

有人知道如何使用 Zend Framework 3 (zf3)实现 Ajax分页吗?

我使用了Doctrine ORM从数据库中检索数据。

1 个答案:

答案 0 :(得分:0)

好的。确实与普通的GET请求相同,因为它涉及xml http request,因此您只会动态地进行响应。

例如,以下indexAction

use Zend\View\Model\JsonModel;

// class, other use-statements, etc

public function indexAction()
{
    $page = $this->params()->fromQuery('page', 1); // get page from GET, default page 1

    /** @var QueryBuilder $qb */
    $qb = $this->getObjectManager()->createQueryBuilder();
    $qb->select('u')
       ->from(User::class, 'u')
       ->orderBy('u.createdAt', 'DESC');

    $paginator = new Paginator(new OrmAdapter(new OrmPaginator($qb)));
    $paginator->setCurrentPageNumber($page);
    $paginator->setItemCountPerPage(25);

    if ($this->getRequest()->isXmlHttpRequest()) {
        return new JsonModel([
            'paginator'   => $paginator,
            'queryParams' => $this->params()->fromQuery(),
        ]);
    }
    return [
        'paginator'   => $paginator,
        'queryParams' => $this->params()->fromQuery(),
    ];
}

在这里,您通常会在标准GET请求的最底部return语句中结束。对于ajax类型的请求,语句$this->getRequest()->isXmlHttpRequest()返回true,并且您知道它是通过$.ajax / $.get / $.post发送的(通常,除非是本机JS或类似的东西)。在这些情况下,您只想响应数据,而不响应完全呈现的视图。这是您返回JsonModel的时候。

为确保其按预期工作,还必须在配置中启用JsonViewStrategy。您可能希望在global.php中启用此功能,而不是仅在下面的模块中启用它,以便在任何地方都启用它:

'view_manager' => [
    //...

    'strategies' => [
        'ViewJsonStrategy',
    ],
],

那么剩下要做的就是使用JavaScript进行客户端操作。就像确保您更新了分页,页面内容等一样。也许是URI锚...