codeigniter 4.6.8 不支持自动路由,/home 报 404 是因未显式注册路由;必须用 $routes->get('/home', 'home::index') 绑定,且需执行 php spark cache:clear 清除路由缓存。

CodeIgniter 4.6.8 没有“自动路由”功能,所谓“改进版自动路由”是误解——它仍默认关闭自动发现机制,必须显式注册路由。
为什么 /home 访问直接报 404?
CI4.6.8 从首个版本起就移除了 CI3 那种基于文件名的自动映射(即访问 /home 自动调用 Home::index())。即使你已创建 app/Controllers/Home.php 并定义了 index() 方法,框架也不会主动关联 URL 和控制器。
错误信息 Can't find a route for 'get: home' 就是明确提示:这条路由根本没被声明。
- 不是环境或权限问题,而是配置缺失
- 不是 Apache 或 PHP 版本不兼容,是设计使然
- 哪怕你升级到 4.6.8,
$routes->setAutoRoute(true)也**不存在**——该方法从未在 CI4 中实现过
$routes->get('/home', 'Home::index') 是唯一可靠写法
所有可访问路径都得靠这一行显式绑定。它不是“可选配置”,而是强制前提。
-
/home必须以/开头,不能写成home或./home -
Home::index中的类名Home必须首字母大写,方法名index必须小写;写成home::index或Home::Index都会失败 - 双冒号
::是固定语法,不能替换成.、->或: - 若控制器在子命名空间(如
App\Controllers\Admin\Dashboard),仍只需写Admin\Dashboard::index,无需加App\Controllers\
缓存导致改了路由也不生效?执行 php spark cache:clear
CI4.6.8 默认启用路由缓存,修改 app/Config/Routes.php 后不会自动重载——这是最常被忽略的环节。
- 仅保存文件 ≠ 路由立即生效
- 必须运行
php spark cache:clear清除缓存,否则旧路由规则仍在内存中 - 验证是否生效:运行
php spark routes,查看输出里是否有你刚加的/home行 - 开发阶段建议在
.env中设CI_ENVIRONMENT = development,避免缓存干扰调试
动态参数必须用 $1 引用,且控制器方法要带类型提示
比如 $routes->get('/product/(:num)', 'Product::view/$1'),看似简单,但漏掉任一细节就会 500 或参数为空。
-
$1是占位符捕获值的引用,写成$2、$$1或漏掉$都会导致参数丢失 -
Product::view()方法签名必须是public function view(int $id)—— 类型提示int不可省略,否则 CI4 会因类型不匹配拒绝传参 - 若需字符串参数,用
(:any)占位符,并在方法中声明string $slug - 正则捕获(如
/user/([a-z0-9\-]+))同样要用$1,且括号必须英文半角
真正容易被忽略的,是路由顺序和缓存清理这两点——它们不报错,却让配置“看起来没用”。











