首页 > 解决方案 > 如何实现 Zend Framework 3 + Ajax 分页?

问题描述

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

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

标签: ajaxzend-frameworkpaginationdoctrinezend-framework3

解决方案


当然。实际上与普通的 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(),
    ];
}

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

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

'view_manager' => [
    //...

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

那么,剩下要做的就是用 JavaScript 做客户端的事情了。比如确保更新分页、页面内容等。也许是一个 URI 锚......


推荐阅读