【问题标题】:cakephp 3.3: pagination and sorting error when model is in urlcakephp 3.3:模型在 url 中时的分页和排序错误
【发布时间】:2017-12-19 06:54:42
【问题描述】:

我有以下事件控制器:

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 日志并没有出现 order by 子句。如果我在没有模型的情况下手动编辑 url:events?page=2&sort=id&direction=asc 结果是正确的。

是我做错了什么还是一个错误?

谢谢

【问题讨论】:

    标签: sorting cakephp pagination cakephp-3.3


    【解决方案1】:

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

    一旦您配置了sortWhitelist,分页器组件就会拒绝所有其他排序参数。

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

    所以你必须在sortWhitelist 中包含Events

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

    【讨论】:

    • 我这样做了。但后来没有任何效果。访问/events时不是事件,sql日志没有order by子句。很抱歉没有早点告诉。
    • @gong 如果从选项中删除sortWhitelist 是否有效?
    猜你喜欢
    • 1970-01-01
    • 2012-08-29
    • 2011-07-21
    • 2012-05-10
    • 1970-01-01
    • 2016-11-13
    • 1970-01-01
    • 1970-01-01
    • 2011-09-24
    相关资源
    最近更新 更多