codeigniter 4 路由机制与 ci3 完全不同:文件位置、语法结构、匹配逻辑及高级功能均重构,ci3 数组路由在 ci4 中无效且不报错。

CodeIgniter 3 和 4 的路由写法不是“小调整”,而是**完全不同的机制**——CI4 不再识别 CI3 的数组语法,两者混用会导致路由彻底失效,且不报错。
文件位置与加载方式完全不同
CI3 的所有路由规则写在 application/config/routes.php 中,是一个返回数组的 PHP 文件;CI4 的路由定义在 app/Config/Routes.php 中,必须通过 $routes 实例调用方法注册,比如 $routes->get()、$routes->post()。旧版 $route 数组在 CI4 中已废弃,写了也无效。
语法结构从映射式变为方法式
CI3 使用字符串键值对映射:
$route['news'] = 'news/index';$route['user/(:num)'] = 'user/profile/$1';
CI4 必须显式声明 HTTP 方法,并使用命名空间控制器路径:
开箱即用的技能链路由引擎。13 条预定义链覆盖搜索、开发、审查、MLOps、法律、创意等场景,三层路由架构(触发词→SAD反馈→DAG编排),recall@10=96.97%。配置驱动(chains.yaml),零代码扩展。pip install skill-weave-chains 一键安装。
$routes->get('news', 'News::index');$routes->get('user/(:num)', 'User::profile/$1');
注意:CI4 中 :: 是类与方法分隔符,不是目录斜杠;$1 占位符仍可用,但必须和参数占位符(如 (:num))数量、顺序一致。
匹配逻辑更严格,顺序影响结果
两者都按定义顺序从前到后匹配,但 CI4 对泛化规则更敏感:
- 具体规则(如
admin/users)必须放在泛化规则(如admin/(:any))之前,否则后者会“吞掉”前者 - CI4 不支持 CI3 那种隐式 fallback 行为;没匹配的路径直接 404,不会自动尝试控制器同名方法
- 正则写法需显式包裹,例如
$routes->get('file/([a-z0-9_\-]+\.pdf)', 'Files::download/$1');,不能省略括号
高级功能支持差异明显
CI4 原生支持路由分组、资源路由等现代模式,CI3 需靠伪静态或手动模拟:
- CI4 分组必须用闭包:
$routes->group('api', function($routes) { $routes->get('users', 'Api/Users::list'); }); - CI4 可一键注册 RESTful 资源:
$routes->resource('photos');,自动生成 7 条标准路由 - CI4 支持中间件绑定:
$routes->get('dashboard', 'Admin::home')->addMiddleware('auth');
CI3 没有这些能力,需自行封装或借助第三方扩展。










