cakephp 3.3:模型在url中时的分页和排序错误
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了cakephp 3.3:模型在url中时的分页和排序错误相关的知识,希望对你有一定的参考价值。
我有以下事件控制器:
public $paginate = [
'sortWhitelist' => ['title', 'id', 'price', 'date', 'Categories.description'],
'order' => ['date' => 'desc']
];
和索引方法:
$events = $this->Events->find()->contain(['Categories']);
$this->set('events', $this->paginate($events));
在我的视图文件中,我有一张表与echo $this->Paginator->sort('id', 'code')
和一个
echo $this->Paginator->numbers([
'separator' => '',
'currentTag' => 'a',
'modulus' => 25,
'currentClass' => 'active',
'tag' => 'li',
'first' => 1
]);
如果我去/events
页面,我会得到预期的结果。如果我按ID排序并在第2页中单击,则网址显示events?page=2&sort=Events.id&direction=asc
,结果不正确。
我看到sql日志,没有order by子句出现。如果我手动编辑没有模型的网址:events?page=2&sort=id&direction=asc
,结果是正确的。
我做错了什么或者它是一个错误?
谢谢
答案
排序字段不在您的白名单中。
一旦配置了sortWhitelist
,paginator组件就会拒绝所有其他排序参数。
paginator组件理解sort=id
查询参数,并假设您指的是分页的默认模型,但帮助程序遵循排序参数的命名约定。其中包括型号名称。 sort=id
参数有效,因为id
在您的白名单中。
所以你必须在Events
中加入sortWhitelist
public $paginate = [
'sortWhitelist' => ['Events.title', 'Events.id', 'Events.price', 'Events.date', 'Categories.description'],
'order' => ['Events.date' => 'desc']
];
以上是关于cakephp 3.3:模型在url中时的分页和排序错误的主要内容,如果未能解决你的问题,请参考以下文章