codeigniter 4 的命名空间由 app/config/constants.php 中的 app_namespace 常量唯一定义,默认为 'app';修改时必须同步更新该常量、所有类文件的 namespace 声明及 app/config/autoload.php 中的 $psr4 映射,三者严格对齐,否则触发 class not found 错误。

CodeIgniter 4 的命名空间不能“随意改”,它是一套强约束的加载契约:改错一处,Class not found 就立刻报给你看。核心原则是——命名空间必须与文件物理路径、Autoload.php 映射、Constants.php 声明三者严格对齐。
App命名空间在哪定义?别碰APP_NAMESPACE常量以外的地方
全局应用命名空间由 app/Config/Constants.php 中的 APP_NAMESPACE 常量控制,默认值是 'App'。这是唯一合法的入口点:
- 所有控制器、模型、库、实体等自定义类,若想被自动加载,必须声明为
namespace AppXXX;(例如namespace AppControllers;) - 修改它需同步更新三处:
Constants.php中的define('APP_NAMESPACE', 'MyApp');、所有类文件顶部的namespace声明、以及app/Config/Autoload.php中的$psr4映射 - 不要在
system/或public/下手动加namespace—— 那些目录不参与应用级 PSR-4 自动加载
$psr4 映射写错的典型症状:类存在但死活找不到
即使你把类文件放对了位置、也写了正确的 namespace,只要 app/Config/Autoload.php 里的 $psr4 数组配错了,就会触发 Class 'AppControllersHome' not found。常见错误包括:
- 路径末尾漏掉斜杠:
$psr4['App\'] = APPPATH;✅,$psr4['App\'] = APPPATH . 'Controllers';❌(会拼成APPPATH . 'Controllers' . 'Controllers/Home.php') - Windows 下反斜杠没转义:
'AppLibrary'应写成'App\Library\'或用正斜杠'App/Library/' - 映射键用了小写或驼峰:
$psr4['app\']不生效,PSR-4 要求命名空间前缀首字母大写且结尾带反斜杠 - 把 helper 或 service 往
$psr4里塞:$psr4['App\Helpers\']是无效的,helper 必须进$helpers = ['url', 'my_helper'];
App目录重命名后,命名空间还叫App吗?
叫。重命名 app/ 目录(比如改成 src/)只影响物理路径,不影响命名空间语义。命名空间仍是 App,除非你主动改 APP_NAMESPACE。但此时必须同步调整:
-
public/index.php中的$appDirectory指向新路径:$appDirectory = __DIR__ . '/../src'; -
app/Config/Paths.php(注意:文件还在原app/下!)中的$appDirectory也要指向新位置 -
app/Config/Autoload.php中的APPPATH是动态常量,它会随$appDirectory自动更新,无需硬编码路径
真正容易被忽略的是:重命名 app/ 后,你本地开发时很可能还在用旧路径跑 spark 命令,导致缓存生成路径错乱——务必执行 php spark cache:clear 并重启 php spark serve。










