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']
];