codeigniter 4控制器类名必须首字母大写,是psr-4自动加载机制的硬性要求,文件名、类声明、路由写法三者必须严格一致,大小写错误直接导致class not found或404,无法通过配置绕过。

CodeIgniter 控制器类名必须大写开头,不是风格建议,而是框架加载机制的硬性依赖——大小写错误直接导致 404 或 Class not found 错误,且无法通过配置绕过。
PSR-4 自动加载强制要求类名与文件名严格一致
CI4 完全基于 PSR-4 标准加载控制器,而 PSR-4 规定:命名空间路径 + 类名 = 文件系统路径 + 文件名。这意味着:
-
App\Controllers\Dashboard必须对应app/Controllers/Dashboard.php,不能是dashboard.php或DashboardController.php - 类声明必须是
class Dashboard extends BaseController,写成class dashboard或class DashboardController都会触发自动加载失败 - 即使你用
require_once手动引入,CI 的路由解析器仍会按类名匹配 URI 段,大小写不一致会导致路由找不到目标方法
URI 路由与类名映射是大小写敏感的
CI 的路由解析器把 URL 第一段(如 /blog/)直接转为首字母大写的类名去查找,这个过程不经过 strtolower 或 ucfirst 转换:
-
example.com/index.php/blog/→ 尝试加载Blog类(不是blog) -
$routes->get('/admin/users', 'Admin\Users::index')中的Admin\Users是完整类名,大小写错一个字母就报Class 'App\Controllers\Admin\users' not found - CI3 虽然允许小写文件名(如
application/controllers/blog.php),但类名仍必须是class Blog;CI4 连文件名都强制首字母大写
小写类名在 PHP 8.2+ 会触发 Deprecated 警告
PHP 8.2 开始,非首字母大写的类名(如 class home)已被标记为弃用,未来版本将彻底禁止。CI4 提前对齐这一趋势:
- 使用小写类名在 CI4 中不仅路由失败,还会在日志里看到
Deprecated: Class name must be capitalized - CI3 兼容旧写法是历史包袱,CI4 明确放弃兼容——这不是“要不要大写”的问题,是“不写大写根本跑不起来”
- IDE(如 PhpStorm)和静态分析工具(如 PHPStan)也会因类名不符合 PSR-12 规范而报错,影响开发体验
最常被忽略的一点:很多人以为改个 .htaccess 或关掉 setAutoRoute 就能绕过命名规则,其实不行。CI4 的类加载、路由分发、命名空间解析三者深度耦合,任何一环脱离首字母大写约定,整个请求生命周期就会在第一步中断。











