Как я могу реализовать Zend Framework 3 + Ajax Pagination? - PullRequest
0 голосов
/ 02 октября 2018

Кто-нибудь знает, как реализовать Ajax Pagination с Zend Framework 3 (zf3)?

Я использовал Doctrine ORM для извлечения данных из базы данных.

1 Ответ

0 голосов
/ 02 октября 2018

Конечно.Так же, как и обычный запрос 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 ...

...