Symfony2 - Propel和KnpPaginatorBundle:如何按列排序?

时间:2012-09-26 06:29:47

标签: symfony propel

在使用Propel ORM的Symfony2项目中,我尝试使用KNP Paginator捆绑按列对列表视图进行排序。我的代码如下:

public function indexAction() 
{
    $query = CustomerQuery::create();

    $paginator = $this->get('knp_paginator');
    $pagination = $paginator->paginate($query, $this->get('request')->query->get('page', 1), 30);

    return compact('pagination');
}

我的观点是:

<table>
    <thead>
        <tr>
            <th>{{ pagination.sortable('Company', 'companyName')|raw }}</th>
            <th>{{ pagination.sortable('Contact', 'contact')|raw }}</th>
            <th>{{ pagination.sortable('E-mail', 'email')|raw }}</th>
        </tr>
    </thead>
    <tbody>
        {% for customer in pagination %}
            <!-- [...] -->
        {% endfor %}
    </tbody>
</table>

生成的链接似乎是正确的,因为我得到了(例如):

  

/客户/排序=&的companyName放大器;方向= ASC&安培;页= 1

但它没有对我的查询进行排序:我生成的请求中没有 ORDER BY 子句。所以,我的问题是:Propel的结果排序是否可用(如果是的话,我错在哪里)?或者我应该在控制器中手动处理它?<​​/ p>

1 个答案:

答案 0 :(得分:0)

您可以为* knp_paginator.subscriber *事件创建订阅者,并使其成为对查询应用某种排序的类。

Knp \ Component \ Pager \ Event \ Subscriber \ Sortable \ Doctrine \ ORM \ QuerySubscriber 为例。

我会给knp_components做一个PR来添加一个PropelQuerySortable类,但我不知道到底是什么时候。