CodeIgniter 4 中路由组不支持直接设置命名空间,需通过控制器命名空间声明、group() 路径前缀及 PSR-4 映射协同实现;必须统一控制器 namespace、在 group 中用 'namespace' 参数指定前缀、并在 Autoload.php 中配置对应 PSR-4 映射,缺一不可。

CodeIgniter 4 中,路由组本身不支持直接“设置命名空间”,但可以通过 控制器类的命名空间声明 + $routes->group() 的路径前缀 + 正确的 PSR-4 映射 实现逻辑上的统一命名空间效果。关键不是给路由组加命名空间,而是让组内所有控制器方法都落在同一个命名空间下,并确保自动加载能准确定位。
1. 确保控制器类使用目标命名空间
路由组不改变 PHP 类的命名空间,它只影响 URL 路径前缀。所以第一步是统一控制器文件顶部的 namespace 声明:
- 比如你要为后台模块设统一前缀
Admin,所有后台控制器应声明:namespace AppControllersAdmin; - 对应文件路径应为:
app/Controllers/Admin/Dashboard.php、app/Controllers/Admin/Users.php等 - 不能混用:
namespace AppControllers;和namespace AppControllersAdmin;放在同一组里,否则自动加载会失败
2. 在 Routes.php 中用 group() 绑定 URL 前缀
在 app/Config/Routes.php 中,用 $routes->group() 定义路径前缀,同时指定控制器时带上完整类名(含命名空间):
开箱即用的技能链路由引擎。13 条预定义链覆盖搜索、开发、审查、MLOps、法律、创意等场景,三层路由架构(触发词→SAD反馈→DAG编排),recall@10=96.97%。配置驱动(chains.yaml),零代码扩展。pip install skill-weave-chains 一键安装。
- 正确写法(显式指定带命名空间的控制器):
$routes->group('admin', ['namespace' => 'App\Controllers\Admin'], function($routes)<br>{<br> $routes->get('dashboard', 'Dashboard::index');<br> $routes->get('users', 'Users::list');<br>}); -
['namespace' => 'App\Controllers\Admin']是可选参数,但它会让组内所有控制器简写(如'Dashboard::index')自动补全该命名空间,避免重复写全名 - 注意:双反斜杠
\是 PHP 字符串中转义反斜杠的写法,不可省略
3. 检查 PSR-4 映射是否匹配
打开 app/Config/Autoload.php,确认 $psr4 数组包含对应映射:
- 必须有:
$psr4 = [<br> 'App\' => APPPATH,<br> 'App\Controllers\Admin\' => APPPATH . 'Controllers/Admin/',<br>];
- 路径末尾要带斜杠,命名空间末尾要带反斜杠,两者严格对应
- 如果漏掉这一行,即使 namespace 和 group 都对了,也会报 Class not found
4. 不要用 CI3 思路套 CI4
CI3 没有命名空间概念,靠 $route['admin/users'] = 'admin/users'; 映射到文件;CI4 必须走 PSR-4 加载机制:
- 不要在 group 里写
'admin/users' => 'AdminUsers::index'这种旧式数组赋值(CI4 已废弃) - 不要试图在路由规则里“动态改命名空间”,命名空间是类定义的一部分,运行时不可变
- 如果想按角色隔离,建议用子命名空间(如
AppControllersApiV1),而不是靠路由组“模拟”命名空间


















