2012-09-10 26 views
8

我已经读过Pagerfanta是Symfony2的首选分页插件,但是我在使它正常工作时遇到了一些麻烦。我已经下载了pagerfanta和PagerfantaBundle的代码,并按照WhiteOctober Github readme filethis tutorial中的说明安装它们。我很确定我的控制器中的代码是可以的,但是我的模板文件有问题。使用Pagerfanta在Symfony2中进行分页的正确方法是什么

我的控制器代码:

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

我并没有改变,从什么是之前我添加分页代码,因为文件说的路线:使用变量“页”来传播

的路由对于当前的路线自动生成页码。

...但我不知道是否路由不正确是问题的一部分。假设情况如此,我不知道如何继续。

我一直无法找到任何其他我已经链接到上面的源代码的指令,所以如果成功实现此目的的人可以分享他们如何做到这一点的细节,那将是非常好的。

+0

你是否路由模式包括页面属性?即'/ articles/{page}' – AdrienBrault

+0

更新:控制器似乎有问题。具体来说,DocrtineORMAdapter无法正常工作(即'$ pagerfanta-> getNbResults()'返回0 - 因此在Prevous和Next之间没有页面)。该文档指出传递给构造函数的参数可以是Query或QueryBuilder,但我怀疑只有后者是正确的。当我更改为'$ pagerfanta = new Pagerfanta(new ArrayAdapter($ query-> getResult())'时,它会返回正确数量的结果。@AdrienBrault - 我对路由模式进行了修改,现在它可以工作,但是不应该需要。 –

+0

所以我仍然留下了为什么?page =不会自动添加到路由中,并且为什么没有应用css(现在分页器看起来像Previous123Next,没有空格或格式) –

回答

6

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

在您的路线中添加一个{page}(如@AdrienBrault所回答的),您希望进行分页。

这样的:

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

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

为我工作。

+0

这可以工作,但实际上这可以通过查询参数完成,如下所示: OP问道。只需在请求中添加'Request $ request'并从'$ request-> get('page',1)获取'$ page'' – xPheRe

+0

Request的get方法遍历所有参数(查询,属性和请求)。正式建议在知道参数来自哪里时避免它:在这种情况下,您需要使用'$ request-> query-> get('page',1)'。 –

1

我不得不使用“currenPage”来代替FO“页”在我的路由和我发现了一个办法做到这一点:

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

相关问题