У меня проблема, что кнаг-пагинатор работает только так:
$em = $this->get('doctrine.orm.entity_manager');
$dql = "SELECT a FROM MainArtBundle:Art a";
$query = $em->createQuery($dql);$paginator = $this->get('knp_paginator');
$pagination = $paginator->paginate(
$query,
$this->get('request')->query->get('page', 1) /*page number*/,
8 /*limit per page*/
);
Но не так:
$em = $this->getDoctrine()->getManager();
$entities = $em->getRepository('MainArtBundle:Art')->findAll();
$paginator = $this->get('knp_paginator');
$pagination = $paginator->paginate(
$entities,
$this->get('request')->query->get('page', 1) /*page number*/,
/*limit per page*/
);
Почему это так? Я не понимаю
Вот мой призыв к ветке:
<li>{{ knp_pagination_sortable(paginator, 'Oldest', 'a.id', {'direction': 'desc'}) }}</li>
Привет майкл
KNP не поддерживает сортировку элементов массива, как описано Вот.
Лучше извлекать и сортировать данные на уровне базы данных. Во втором примере вы извлекаете все данные из таблицы (и могут быть больше), а затем просите у paginator ограничить их. Это не очень хорошо. Так что лучше сделать эту работу с запросом, и пусть справиться с элементом paginator.
В настоящее время KNP Paginator может разбивать на страницы:
array
Doctrine\ORM\Query
Doctrine\ORM\QueryBuilder
Doctrine\ODM\MongoDB\Query\Query
Doctrine\ODM\MongoDB\Query\Builder
Doctrine\Common\Collection\ArrayCollection
— любая коллекция отношений доктрины, включаяModelCriteria
— Выполнить запрос ORMSolarium_Client
а также Solarium_Query_Select
как элементыУвидеть док Фереренс для деталей
мои два цента
findAll()
совместим с Knp_paginator, вы просто должны передать его своему пагинатору:
$query = $em->getRepository('Acme\FOOBundle\Entity\BAR')->findAll();
$paginator = $this->get('knp_paginator');
requests = $paginator->paginate(
$query,
$this->get('request')->query->get('page', 1),
5
);
FindAll возвращает массив. Пагинатор knp требует объекта запроса доктрины.
Вы можете попробовать это:
$query = $repository->createQueryBuilder('a');