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

CodeIgniter 4分页仅显示第一页,点击其他页报404错误求助

CodeIgniter 4分页点击第二页出现404错误的解决方案

问题原因

分页点击后返回404的核心问题是路由配置与分页URL格式不匹配:

  • CodeIgniter 4分页器默认生成带查询参数的URL(如Main/customers?page=2),若你配置了$usePageUri = true,则会生成路径式URL(如Main/customers/page/2)。
  • 当前Main组路由里,$routes->get('(:segment)/(:any)', 'Main::$1/$2');仅能匹配两段路径,无法处理customers/page/2这种三段式路径URL,导致路由匹配失败,返回404。

解决方案

方案1:修改分页器配置,使用查询参数(推荐,默认方式)

打开app/Config/Pager.php,确保$usePageUri设置为false:

public $usePageUri = false;

此时分页器会生成Main/customers?page=2格式的URL,现有路由$routes->get('(:segment)', 'Main::$1');可正常匹配请求(查询参数不影响路由匹配逻辑)。

方案2:调整路由,支持路径式分页URL

若偏好路径式分页URL(如Main/customers/page/2),需在Main组路由中添加专门的匹配规则,且要放在通用路由前面(路由匹配优先从上到下):

$routes->group('/Main', ['filter'=>'authented'], static function($routes){
    $routes->get('', 'Main::index');
    // 优先匹配分页路径
    $routes->get('(:segment)/page/(:num)', 'Main::$1', ['as' => 'page', 'page' => '$2']);
    // 匹配带单个数字参数的方法(如user_edit/1)
    $routes->get('(:segment)/(:num)', 'Main::$1/$2');
    // 匹配普通方法
    $routes->get('(:segment)', 'Main::$1');
    
    $routes->match(["get", "post"], "edit-customer/(:num)", "Customer::editCustomer/$1");
});

该路由会将Main/xxx/page/2请求映射到Main::xxx方法,同时把分页参数2作为page查询参数传递,控制器代码无需修改即可正常接收。

额外优化点

  • 列表视图中,无数据时的<td colspan="4">需改为colspan="9",与表格列数对应,避免布局错乱。
  • 若后续需要添加筛选条件,调用countAllResults()前需先执行resetQuery(),防止计数不准确。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 13:21:24