CakePHP Как сохранить строку поисковых запросов на последующих страницах Paginator

У меня была страница поиска, которая правильно отфильтровывалась, но когда она разбивалась на страницы, вы теряли данные, так как я размещал их. Поэтому я переключил его на 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( __( '&laquo; 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 &raquo;' ), [
'escape'      => false,
'tag'         => 'li',
'class'       => 'arrow',
'disabledTag' => 'a'
] ); ?>
</ul>

-1

Решение

Класс пагинатора автоматически объединяет текущие параметры запроса:

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 во время выполнения. Итак, чтобы предотвратить проблему в вопросе — просто удалите этот вызов (а затем, возможно, решите проблему маршрутизации, которая побудила вас добавить ее =)).

2

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

Других решений пока нет …

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