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

时间:2015-10-02 02:58:31

标签: php cakephp pagination cakephp-2.6

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

我已尝试在选项中的paginator 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>

1 个答案:

答案 0 :(得分:2)

分页器类automatically 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' => ''
    ]
] );

这将消除Paginator的运行时url选项。因此,为了防止问题中出现问题 - 只需删除该调用(然后,可能会修复导致您添加它的路由问题=)。