在使用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>
答案 0 :(得分:0)
您可以为* knp_paginator.subscriber *事件创建订阅者,并使其成为对查询应用某种排序的类。
以 Knp \ Component \ Pager \ Event \ Subscriber \ Sortable \ Doctrine \ ORM \ QuerySubscriber 为例。
我会给knp_components做一个PR来添加一个PropelQuerySortable类,但我不知道到底是什么时候。