Мне не удается использовать нумерацию страниц с пользовательским запросом. Я точно следую тому, что есть в документе, но это не работает. Задача состоит в том, чтобы разбить список записей на страницы с флагом ‘valid’ на ‘Y’ или ‘N’.
В контроллере:
if (!isset($this->request->query['valid']) || $this->request->query['valid'] == '')
$allFilters['valid'] = 'N';
else
$allFilters['valid'] = 'Y';
$this->paginate = ['finder' => ['curnames' => $allFilters]];
$data = $this->paginate($this->Names)->toArray();
В модели:
public $paginate = ['finder' => 'curnames', 'limit' => 25, 'order' => ['Names.id' => 'asc']];
public function findCurnames(Query $query, array $options) {
$query->where([
'valid' => $option['valid']
]);
return $query;
}
Когда я выполняю код, я получаю Cake\Network\Exception\NotFoundException
исключение. Чего мне не хватает?
Обновление: версия 3.3. Ошибка вызвана, когда это выполнено:
$data = $this->paginate($this->Names)->toArray();
Обновление: в контроллере я поменяю строку
$this->paginate = ['finder' => ['curnames' => $allFilters]];
в
$paginate = ['finder' => ['curnames' => $allFilters]];
и ошибка больше не появляется. Но условие фильтрации по ‘valid’ = ‘Y’ или ‘N’ не принимается во внимание. Так что это все еще не работает.
Я получил ответ. Ошибка происходит из-за опечатки. Правильный код должен быть
'valid' => $options['valid']
Варианты с ‘s’.
Теперь это работает.
Не проще ли сделать что-то подобное (без какого-либо специального метода поиска):
if ($this->request->getQuery('valid', '') == '')
$valid = 'N';
else
$valid = 'Y';
$this->paginate = [
'limit' => 25,
'order' => ['Names.id' => 'asc']
];
$query = $this->Names->find('all')
->where([
'valid' => $valid
]);
$data = $this->paginate($query)->toArray();