Я читал, что Pagerfanta является предпочтительным плагином для разбивки на страницы для Symfony2, но у меня возникли проблемы с его корректной работой. Я скачал код для pagerfanta и PagerfantaBundle и установил их, как описано в файле readme WhiteOctober Github и в этом руководстве. Я почти уверен, что код в моем контроллере в порядке, но что-то не так с моим файлом шаблона.
Мой код контроллера:
public function indexAction($page = null)
{
...
$query = $em->createQuery('SELECT something FROM some_table');
$adapter = new DoctrineORMAdapter($query);
$pager = new Pagerfanta($adapter);
$pager->setMaxPerPage(10);
if (!$page) $page = 1;
try {
$pager->setCurrentPage($page);
}
catch(NotValidCurrentPageException $e) {
throw new NotFoundHttpException('Illegal page');
}
return $this->render('MyBundle:MyEntity:index.html.twig', array(
'pager' => $pager,
));
}
В моем шаблоне:
...
<table>
{% for object in pager.currentPageResults %}
<tr>
<td>{{ object.attribute1 }}</td>
<td>{{ object.attribute2 }}</td>
<td>{{ object.attribute3 }}</td>
</tr>
{% endfor %}
</table>
{% if pager.haveToPaginate %}
{{ pagerfanta(pager) }}
{% endif %}
Когда я захожу на страницу, я получаю список первых 10 объектов. Однако рендеринг пейджера — это всего лишь ПредыдущийСледующий как одно слово (не ссылки и не страницы 1, 2, 3 и т. д.).
Если я добавлю ?page=2
к URL-адресу, он не отобразит следующие 10 элементов в списке.
Я не изменил маршрут по сравнению с тем, что был до того, как добавил код разбиения на страницы, потому что в документации сказано:
Маршруты генерируются автоматически для текущего маршрута с использованием переменной «page» для распространения номера страницы.
... но мне интересно, является ли неправильная маршрутизация частью проблемы. Предполагая, что это так, я не уверен, как поступить с этим.
Мне не удалось найти какие-либо инструкции в других источниках, на которые я ссылался выше, поэтому было бы здорово, если бы кто-то, кто успешно реализовал это, мог поделиться подробностями того, как они это сделали.
Request $request
к действию и получите$page
от$request->get('page', 1)
16.08.2013get
проходит через все параметры (запрос, атрибуты и запрос). Официально рекомендуется избегать этого, когда вы знаете, откуда берется параметр: в этом случае вам нужно будет использовать$request->query->get('page', 1)
. 09.10.2015