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

How can I Implement Zend Framework 3 + Ajax Pagination?

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

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

当然可以。与普通的 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() returns true 你知道它是通过 $.ajax / $.get / $.post 发送的(通常,除非本机JS 或类似的东西)。在这些情况下,您只想响应数据,而不是完全呈现的视图。这是当你 return JsonModel.

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

'view_manager' => [
    //...

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

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