CI4默认禁用自动路由,必须显式启用或逐条声明;URL与控制器映射严格区分大小写、依赖完整命名空间;CI3数组式路由失效,须改用get/post及(:segment)等新占位符;推荐禁用自动路由,改用resource、group、setDefaultNamespace等可控方案。

不要开启自动路由,除非你正在快速原型验证且明确接受后续维护成本。
CI4自动路由默认关闭,不是疏忽而是设计选择
CI4启动时自动设为 $routes->setAutoRoute(false),这和CI3靠文件路径“猜”控制器的逻辑完全不同。它不尝试解析 app/Controllers/Home.php 对应 /home,哪怕命名完全标准——没手动注册,就是404,连调试提示都可能被静默吞掉(尤其在非开发环境)。
- 自动路由只对
AppControllers*命名空间下的控制器生效,自定义命名空间(如AdminControllers*)直接无视 - 不支持参数捕获(
/user/123→User::view(123))、中间件绑定、HTTP方法限制(GET/POST区分) - 无法与资源路由(
$routes->resource('posts'))混合使用,一开就绕过所有显式规则
什么时候可以临时打开?仅限这三种情况
打开前必须确认:项目处于本地开发阶段、无并发协作、且未来两周内会补全显式路由。
- 刚从CI3迁移,想快速验证控制器是否能跑通,避免逐条写
$routes->get()占用初期时间 - 做一次性数据导入工具,URL全是内部调用(如
/cli/import/users),不对外暴露也不需SEO - 用CI4搭内部调试页,比如
/debug/db查连接状态,且明确不加中间件、不走认证
一旦进入测试或上线阶段,立刻关掉并补全路由表——否则团队成员改个控制器方法名,线上就挂。
开箱即用的技能链路由引擎。13 条预定义链覆盖搜索、开发、审查、MLOps、法律、创意等场景,三层路由架构(触发词→SAD反馈→DAG编排),recall@10=96.97%。配置驱动(chains.yaml),零代码扩展。pip install skill-weave-chains 一键安装。
比“开不开”更关键的是替代方案怎么选
不用自动路由 ≠ 每条都手写。CI4提供更可控的快捷方式:
- 资源路由:
$routes->resource('photos')一键生成7个RESTful路径(index、show、create等),适合标准CRUD - 路由组:
$routes->group('admin', ['filter' => 'auth'], function($routes){...})避免重复写前缀和中间件 - 命名空间映射:
$routes->setDefaultNamespace('App\Controllers\Api\');后续所有$routes->get()自动补全命名空间
这些方案保留了显式声明的可追溯性,又避免了机械重复——而自动路由省下的那几行代码,后期会以排查404、修复大小写错误、追查参数丢失等形式加倍还回来。
真正容易被忽略的点是:CI4路由大小写敏感且路径与命名空间解耦。比如你写了 $routes->get('/Home', 'Home::index'),但浏览器访问的是 /home,照样404;或者控制器实际在 AppControllersV1Users.php,却只配了 'Users::list' 而没写完整命名空间,也会失败。这些错误不会报“类未找到”,只会静默进404处理器。


















