8

我已经读过 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”为当前路由自动生成路由以传播页码。

...但我想知道不正确的路由是否是问题的一部分。假设是这种情况,我不确定如何进行。

我无法找到我上面链接到的其他来源的任何说明,所以如果成功实施此操作的人可以分享他们如何做到这一点的详细信息,那就太好了。

4

2 回答 2

6

我认为您的应用程序不知道如何解析?page=2控制器操作。

在您的路线中包含一个 {page} (正如@AdrienBrault 回答的那样),您希望对其进行分页。

像这样:

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

PagerFantaBundle 将(我猜)尝试猜测正确的路线。

为我工作。

于 2012-09-26T19:41:12.007 回答
1

我不得不在我的路由中使用'currenPage'而不是'page',我找到了一种方法来做到这一点:

{{ pagerfanta(pager, 'my_pager_view', {'pageParameter':'[currentPage]'}) }}

于 2017-02-22T18:42:56.970 回答