You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何去除CakePHP 2分页器生成链接中的url与limit参数

问题

在CakePHP 2的视图中使用分页器生成链接时,当前页面URL为:

http://les-clone.ryan/payday_admin/leads

翻页时分页器会自动在URL中添加编码后的路由参数url=payday_admin%2Fleads和limit参数,生成的链接示例如下:

http://les-clone.ryan/payday_admin/leads?url=payday_admin%2Fleads&page=2&limit=20

我只需要保留page参数,期望生成的链接格式为:

http://les-clone.ryan/payday_admin/leads?page=2

我的视图代码:

<nav aria-label="Page navigation example">
  <ul class="pagination justify-content-end mb-0">
    <?php
      echo $this->Paginator->prev('Prev', array('tag' => 'li', 'class'=>'page-item', ' class'=>'page-link'), null, array('class' => 'disabled page-item', 'tag' => 'li', 'disabledTag' => 'a', ' class' =>'page-link'));
      echo $this->Paginator->numbers(array('separator' => '', 'currentTag' => 'a', 'tag' => 'li', 'class'=>'page-item', 'currentClass' => 'disabled bg-primary text-white page-link', ' class'=>'page-link','modulus'=>6));
      echo $this->Paginator->next('Next', array('tag' => 'li', 'class'=>'page-item', ' class'=>'page-link'), null, array('class' => 'disabled page-item', 'tag' => 'li', 'disabledTag' => 'a', 'currentClass'=>'page-link', ' class' =>'page-link'));
    ?>
  </ul>
</nav>

控制器中的分页配置代码:

// define pagination settings
$this->Paginator->settings = array(
        'Application' => array(
                'paramType' => 'querystring',
                'totalLimit' => 20000,
                'limit' => 20000,
                'maxLimit' => $filters['pagination']['perPage'],
                'fields' => array(
                        'Application.*',
                        'ApplicationPayday.*',
                        'ApplicationApiLink.*',
                        'ApplicationResponse.*',
                        'AffiliateId.*',
                        'Redirect.*'
                ),
                'joins' => array(
                        array(
                                'table' => 'tlp_application_paydays',
                                'alias' => 'ApplicationPayday',
                                'type' => 'LEFT',
                                'conditions' => array(
                                        'ApplicationPayday.application_id = Application.id'
                                )
                        ),
                        array(
                                'table' => 'tlp_application_api_links',
                                'alias' => 'ApplicationApiLink',
                                'type' => 'LEFT',
                                'conditions' => array(
                                        'ApplicationApiLink.application_id = Application.id'
                                )
                        ),
                        array(
                                'table' => 'tlp_application_responses',
                                'alias' => 'ApplicationResponse',
                                'type' => 'LEFT',
                                'conditions' => array(
                                        'ApplicationResponse.application_id = Application.id'
                                )
                        ),
                        array(
                                'table' => 'tlp_affiliate_ids',
                                'alias' => 'AffiliateId',
                                'type' => 'LEFT',
                                'conditions' => array(
                                        'AffiliateId.aff_id = Application.tlp_aff_id'
                                )
                        ),
                        array(
                                'table' => 'tlp_redirects',
                                'alias' => 'Redirect',
                                'type' => 'LEFT',
                                'conditions' => array(
                                        'Redirect.application_id = Application.id'
                                )
                        )
                ),
                'conditions' => array(
                        'Application.modified_timestamp >=' => $initialStartDate,
                        'Application.modified_timestamp <=' => $initialEndDate
                ),
                'group' => array(
                        'Application.id'
                ),
                'order' => array(
                        'Application.id' => 'desc'
                ),
                'recursive' => -1
        )
);

// run query to get applications via paginated settings
$applications = $this->Paginator->paginate('Application');
解决方案

要去掉多余的url和limit参数,从控制器配置和视图调用两个层面调整即可:

1. 调整控制器分页配置

在控制器的分页设置中做两处修改:

  • 移除paramType => 'querystring',默认参数处理方式不会强制携带路由参数
  • 让limit值与maxLimit保持一致,避免分页器自动在链接中附加limit参数

修改后的控制器配置片段:

$this->Paginator->settings = array(
        'Application' => array(
                // 移除paramType => 'querystring'
                'totalLimit' => 20000,
                'limit' => $filters['pagination']['perPage'], // 与maxLimit值统一
                'maxLimit' => $filters['pagination']['perPage'],
                // 其他原有配置保持不变
        )
);

2. 在视图中过滤分页参数

如果控制器调整后仍有多余参数,在调用分页器方法时,通过url参数指定只保留page参数:

修改视图中的分页器调用代码:

<nav aria-label="Page navigation example">
  <ul class="pagination justify-content-end mb-0">
    <?php
      echo $this->Paginator->prev('Prev', 
        array('tag' => 'li', 'class'=>'page-item', 'class'=>'page-link', 'url' => array('?' => array('page' => $this->Paginator->current() - 1))), 
        null, 
        array('class' => 'disabled page-item', 'tag' => 'li', 'disabledTag' => 'a', 'class' =>'page-link')
      );
      
      echo $this->Paginator->numbers(array(
        'separator' => '', 
        'currentTag' => 'a', 
        'tag' => 'li', 
        'class'=>'page-item', 
        'currentClass' => 'disabled bg-primary text-white page-link', 
        'class'=>'page-link',
        'modulus'=>6,
        'url' => array('?' => array()) // 自动携带正确page参数,过滤其他参数
      ));
      
      echo $this->Paginator->next('Next', 
        array('tag' => 'li', 'class'=>'page-item', 'class'=>'page-link', 'url' => array('?' => array('page' => $this->Paginator->current() + 1))), 
        null, 
        array('class' => 'disabled page-item', 'tag' => 'li', 'disabledTag' => 'a', 'currentClass'=>'page-link', 'class' =>'page-link')
      );
    ?>
  </ul>
</nav>

3. 自定义分页Helper(可选)

如果上述方法无法满足需求,可以创建自定义分页Helper,重写生成URL的方法,强制只保留page参数。不过多数场景下,前两种方法已足够解决问题。

内容的提问来源于stack exchange,提问作者Ryan H

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 16:35:29