Sorting cakephp 3.3:模型位于url中时分页和排序错误

Sorting cakephp 3.3:模型位于url中时分页和排序错误,sorting,cakephp,pagination,cakephp-3.3,Sorting,Cakephp,Pagination,Cakephp 3.3,我有以下事件控制器: public $paginate = [ 'sortWhitelist' => ['title', 'id', 'price', 'date', 'Categories.description'], 'order' => ['date' => 'desc'] ]; 以及一种索引方法: $events = $this->Events->find()->contain(['Categories']); $th

我有以下事件控制器:

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页,url将显示
events?page=2&sort=events.id&direction=asc
,结果不正确

我看到sql日志,没有出现ORDERBY子句。如果我不使用以下模型手动编辑url:
events?page=2&sort=id&direction=asc
结果是正确的

我是做错了什么还是一个bug


谢谢

排序字段不在您的白名单中

配置
sortWhitelist
后,分页器组件将拒绝所有其他排序参数

paginator组件理解
sort=id
查询参数,并假定您指的是分页的默认模型,但助手遵循排序参数的命名约定。其中包括模型名称。
sort=id
参数起作用,因为
id
在您的白名单中

因此,您必须在
sortWhitelist

public $paginate = [
    'sortWhitelist' => ['Events.title', 'Events.id', 'Events.price', 'Events.date', 'Categories.description'],
    'order' => ['Events.date' => 'desc']
];

是我干的。但后来什么也没起作用。非事件访问/events时,sql日志没有order by子句。很抱歉没有提前告诉您。@如果您从选项中删除
sortWhitelist
,是否有效?