我已经读过 Pagerfanta 是 Symfony2 的首选分页插件,但我在让它正常工作时遇到了一些麻烦。我已经下载了 pagerfanta 和 PagerfantaBundle 的代码,并按照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 个对象的列表。但是,分页器的呈现只是将 PreviousNext 作为一个单词(不是链接,也没有第 1、2、3 页等)。
如果我添加?page=2
到 URL,它不会显示列表中的下 10 个项目。
在添加分页代码之前,我没有更改路线,因为文档说:
使用变量“page”为当前路由自动生成路由以传播页码。
...但我想知道不正确的路由是否是问题的一部分。假设是这种情况,我不确定如何进行。
我无法找到我上面链接到的其他来源的任何说明,所以如果成功实施此操作的人可以分享他们如何做到这一点的详细信息,那就太好了。