2017-02-19 20 views
0

Мне не удается использовать разбивку на страницы с помощью пользовательского запроса. Я точно следую тому, что находится в документе, но это не работает. Дело в том, чтобы разбивать список записей, имея флаг «valid» в «Y» или «N».CakePHP 3: Как использовать пользовательскую разбивку на страницы?

В контроллере:

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

Update: В контроллере, у меня изменить линию

$this->paginate = ['finder' => ['curnames' => $allFilters]]; 

в

$paginate = ['finder' => ['curnames' => $allFilters]]; 

и ошибка не всплывал больше. Но условие фильтрации на «valid» = «Y» или «N» не учитывается. Так что это все еще не работает.

+0

Всякий раз, когда появляются сообщения об ошибках, пожалуйста, всегда после ** ошибка _complete_ **, то есть ** включая _full_ stacktrace ** (идеально скопированный из журналов, где он доступен в удобной для чтения форме), даже если проблема может быть очевидна для людей, знакомых с CakePHP! Также покажите/опишите соответствующий контекст, то есть покажите/выделите код, который фактически вызывает ошибку, и, пожалуйста, всегда указывайте свою версию _exact_ CakePHP - спасибо! Часто проблемы решаются сами при сборе этой информации. – ndm

+0

Не делайте этого, используйте подходящий подход на основе шаблонов PRG, например [search] (https://github.com/FriendsOfCake/search). Этот плагин выходит из коробки с возможностью сделать то же самое менее чем в 3 строках, и вы можете добавить больше тонких фильтров поиска сверху. – mark

ответ

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

 Смежные вопросы

  • Нет связанных вопросов^_^