У меня была страница поиска, которая правильно отфильтровывалась, но когда она разбивалась на страницы, вы теряли данные, так как я размещал их. Поэтому я переключил его на GET, но не могу понять, как добавить http_build_query ($ params), который я передал обратно в paginator.
Я попытался установить параметры запроса в параметре paginator в параметрах, но безуспешно, и API не упоминает о добавлении параметров запроса.
Как настроить параметры запроса результатов поиска, чтобы разные страницы знали, по чему они фильтруются? Таким образом, поиск по имени = steve и company = SomeCompany поддерживается на страницах 2, 3, 4, по 10 результатов каждый и не сбрасывается, чтобы показать все нефильтрованные 100 результатов.
Простой пример пагинации в контроллере
$this->paginate = [
'limit' => 5,
'order' => [ 'CollectionAgencyAgent.id' => 'desc' ]
];
return $this->paginate( $this->CollectionAgencyAgent, $conditions );
ПОСМОТРЕТЬ с нумерацией страниц
<ul class="pagination <?php echo $class ?>">
<?php
$this->Paginator->options( [
'url' => [
'controller' => ''
]
] );
?>
<?php echo $this->Paginator->prev( __( '« Previous' ), [
'escape' => false,
'tag' => 'li',
'class' => 'arrow',
'disabledTag' => 'a'
] ); ?>
<?php echo $this->Paginator->numbers( [
'separator' => '',
'tag' => 'li',
'currentTag' => 'a'
] ); ?>
<?php echo $this->Paginator->next( __( 'Next »' ), [
'escape' => false,
'tag' => 'li',
'class' => 'arrow',
'disabledTag' => 'a'
] ); ?>
</ul>
Класс пагинатора автоматически объединяет текущие параметры запроса:
public function beforeRender($viewFile) {
$this->options['url'] = array_merge($this->request->params['pass'], $this->request->params['named']);
if (!empty($this->request->query)) {
$this->options['url']['?'] = $this->request->query;
}
parent::beforeRender($viewFile);
}
Поэтому короткий ответ — ничего не делать, и это сработает.
Причина, по которой он не работает с кодом в вопросе, заключается в том, что этот вызов:
$this->Paginator->options( [
'url' => [
'controller' => ''
]
] );
Который уничтожит параметры URL Paginator во время выполнения. Итак, чтобы предотвратить проблему в вопросе — просто удалите этот вызов (а затем, возможно, решите проблему маршрутизации, которая побудила вас добавить ее =)).
Других решений пока нет …