【问题标题】:How can I Implement Zend Framework 3 + Ajax Pagination?如何实现 Zend Framework 3 + Ajax 分页?
【发布时间】:2018-10-04 08:40:11
【问题描述】:

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

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

【问题讨论】:

  • 请添加有关您采取的步骤和失败之处的更多信息。如果您使用手册,请参阅它。如果您偏离它,请提及您在此处所做的事情。

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


【解决方案1】:

当然。与普通的 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 锚点......

【讨论】:

    猜你喜欢
    • 2017-11-22
    • 1970-01-01
    • 1970-01-01
    • 2016-08-31
    • 1970-01-01
    • 2012-03-29
    • 2010-11-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多