CakePHP 如何将搜索查询字符串保留到后续分页器页面

CakePHP How to Persist Search Querystring to Subsequent Paginator Pages

我有一个过滤正确的搜索页面,但是当它分页时,你会丢失数据,因为我正在发布它。所以我将其切换为 GET,但我无法弄清楚如何添加传回给分页器的 http_build_query( $params )。

我试过在分页器 url 的选项中设置查询参数,但没有成功,API 也没有提到添加查询参数。

如何设置搜索结果查询参数,以便不同的页面知道它们被过滤的内容?因此,对 name=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>

分页器classautomatically merges the current request parameters:

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 选项。因此,为了防止问题中的问题 - 只需删除该调用(然后,可能会修复提示您添加它的路由问题=))。