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 Я получаю ожидаемые результаты. Если я сортирую по идентификатору и нажимаю на странице 2, URL показывает events?page=2&sort=Events.id&direction=asc и результат не верный.

Я вижу журнал sql, и не появляется предложение order by. Если я вручную изменить URL-адрес без модели: events?page=2&sort=id&direction=asc результат верный.

я делаю что-то не так или это ошибка?

Спасибо

1 ответ

Поле сортировки отсутствует в вашем белом списке.

Как только вы настроите 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']
];
Другие вопросы по тегам