CakePHP 3: Как использовать пользовательскую нумерацию страниц?

Мне не удается использовать нумерацию страниц с пользовательским запросом. Я точно следую тому, что есть в документе, но это не работает. Задача состоит в том, чтобы разбить список записей на страницы с флагом ‘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’ не принимается во внимание. Так что это все еще не работает.

0

Решение

Я получил ответ. Ошибка происходит из-за опечатки. Правильный код должен быть

'valid' => $options['valid']

Варианты с ‘s’.
Теперь это работает.

0

Другие решения

Не проще ли сделать что-то подобное (без какого-либо специального метода поиска):

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();
0

По вопросам рекламы [email protected]