php – 在Symfony2中使用Pagerfanta进行分页的正确方法是什么

前端之家收集整理的这篇文章主要介绍了php – 在Symfony2中使用Pagerfanta进行分页的正确方法是什么前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我已经读过,Pagerfanta是Symfony2的首选分页插件,但我在使其正常工作时遇到了一些麻烦.我已经下载了pagerfanta和PagerfantaBundle的代码,并按照 WhiteOctober Github readme filethis tutorial中的描述安装了它们.我很确定我的控制器中的代码是可以的,但我的模板文件有问题.

我的控制器代码

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个项目.

添加分页代码之前,我没有改变路线,因为文档说:

The routes are generated automatically for the current route using the variable “page” to propagate the page number.

…但我想知道错误的路由是否是问题的一部分.假设是这种情况,我不知道如何继续这样做.

我一直无法找到上面链接到的其他来源的任何说明,所以如果成功实现此功能的人可以分享他们如何做到这一点的详细信息将会很棒.

我认为你的应用程序不知道如何解析?page = 2到控制器动作.

在您的路线中添加{page}(如@AdrienBrault所述),您希望对其进行分页.

像这样:

my_index:
  pattern:  /{page}
  defaults: { _controller: MyTestBundle:Object:index,page: 1 }
  requirements:
    _method:  GET
    page: \d+

PagerFantaBundle(我猜)会尝试猜测正确的路线.

为我工作.

猜你在找的PHP相关文章