CodeIgniter 4 的默认命名空间由 APP_NAMESPACE 常量唯一确定,不可动态切换;正确做法是统一修改该常量、所有类文件的 namespace 声明及 Autoload.php 中的 $psr4 映射,三者必须严格一致。

CodeIgniter 4 没有“设置 default namespace”的操作,它只有 一个强制生效的全局命名空间起点,由 APP_NAMESPACE 常量唯一决定——不是可选配置,而是 PSR-4 加载机制的锚点。
你不能添加多个“默认命名空间”,也不能动态切换;所谓“设默认”,本质是统一声明 + 全局对齐:改常量、改类文件 namespace、改 $psr4 映射,三者必须完全一致。
✅ 正确做法:只改这一处常量,并同步两件事
-
APP_NAMESPACE的定义位置固定且唯一:app/Config/Constants.php中这行(不可删、不可注释、不可挪到别处):define('APP_NAMESPACE', 'App'); -
改完后,必须同步完成以下两项:
- 所有应用类文件(Controller、Model、Library 等)顶部的
namespace声明,必须以App开头,例如:namespace AppControllers; namespace AppModels; namespace AppLibraries;
-
app/Config/Autoload.php中的$psr4映射,必须严格匹配:$psr4 = [ APP_NAMESPACE . '\' => APPPATH, ];
- 所有应用类文件(Controller、Model、Library 等)顶部的
⚠️ 注意:
APPPATH是app/目录的绝对路径(末尾带斜杠),所以App→app/Controllers/Home.php这样的映射才能自动解析成功。
❌ 常见错误写法(直接导致 Class not found)
- 只改了
Constants.php里的App为MyApp,但没批量替换所有类文件的namespace App...→ 类还在声明AppControllers,而加载器按MyAppControllers找,找不到。 - 在
Autoload.php里手动加了一条$psr4['MyApp\'] = APPPATH;,但APP_NAMESPACE还是'App'→ 框架启动时仍用App解析路由、服务、核心类,冲突。 -
$psr4['App\'] = APPPATH . 'Controllers/';→ 路径写死到子目录,会导致AppModelsUserModel去找app/Controllers/Models/UserModel.php,错位。
? 如果真想用 MyApp 作为根命名空间
只需三步(缺一不可):
- 修改
app/Config/Constants.php:define('APP_NAMESPACE', 'MyApp'); - 全局搜索替换所有类文件顶部的
namespace App→namespace MyApp - 检查
app/Config/Autoload.php中的$psr4:$psr4 = [ 'MyApp\' => APPPATH, // 必须带结尾反斜杠,且与常量值完全一致 ];
不复杂但容易忽略


















