codeigniter 4 的 $routes->group() 必须用闭包定义,不能赋值;正确写法是 $routes->group('admin', function($routes) { $routes->get('users', 'adminusers::index'); }),闭包内子路由自动添加前缀并支持嵌套、多方法、命名空间与中间件配置。

CodeIgniter 4 的 $routes->group() 是组织同类路由的推荐方式,它让后台管理、API 版本、多语言前缀等场景更清晰、更易维护。关键点在于:它必须用闭包定义,不能赋值;且闭包内需调用子路由方法(如 get()、post())来注册具体规则。
group 必须配合闭包使用
常见错误是写成赋值语句,语法虽合法但完全无效:
$routes->group('admin') = function($routes) { ... };正确写法是直接传入闭包作为第二个参数:
开箱即用的技能链路由引擎。13 条预定义链覆盖搜索、开发、审查、MLOps、法律、创意等场景,三层路由架构(触发词→SAD反馈→DAG编排),recall@10=96.97%。配置驱动(chains.yaml),零代码扩展。pip install skill-weave-chains 一键安装。
$routes->group('admin', function($routes) { $routes->get('users', 'AdminUsers::index'); });- 闭包内的
$routes是同一个实例,所有子路由都自动加上/admin前缀 - 支持嵌套 group,比如
$routes->group('api', function($routes) { $routes->group('v1', function($routes) { ... }); });
group 内可混合多种 HTTP 方法
不必只用 get(),你可以按需注册不同动词的路由:
$routes->group('admin', function($routes) { $routes->get('dashboard', 'Admin::dashboard'); $routes->post('users', 'AdminUsers::store'); $routes->delete('users/(:num)', 'AdminUsers::delete/$1'); });- 每个子路由的路径是相对于 group 前缀的,
users/(:num)实际匹配的是/admin/users/123
group 支持参数和命名空间隔离
group 还可传入额外选项,比如控制器命名空间或中间件:
-
$routes->group('api', ['namespace' => 'App\Controllers\Api'], function($routes) { $routes->get('posts', 'Posts::index'); });→ 自动指向App\Controllers\Api\Posts -
$routes->group('admin', ['filter' => 'auth'], function($routes) { ... });→ 整个分组受 auth 过滤器保护 - 多个选项可同时传入,用关联数组形式
注意匹配顺序和默认行为
group 本身不改变路由优先级,但它生成的规则仍遵循“先定义、先匹配”原则:
- 如果 group 外已定义
$routes->get('admin/login', ...),而 group 内又定义了$routes->get('login', ...),前者会优先生效(因为路径更具体) - group 不会自动处理
default_controller或404_override,这些仍需单独配置 - 调试时可用
php spark routes查看是否注册成功 —— 错误写法会导致该分组完全不出现










