命名路由需明确定义、正确调用并配合调试验证:定义时须用带引号的"as"键且置于路由数组前端;生成URL必须用route_to();重定向需自定义redirect_to()函数;验证需执行spark routes、清缓存及查看Debug Toolbar。

要在CodeIgniter 4中让命名路由真正可用、可读、可维护,必须绕过“只写route()就完事”的误区——命名路由不是别名标签,而是需要主动调用、显式传参、配合过滤器和缓存清理的完整链路。
定义命名路由:必须带as键且位置靠前
打开app/Config/Routes.php,在静态路由区块内添加带"as"键的规则:
$routes->get('/admin/users/edit/(:num)', 'Admin\Users::edit/$1', ["as" => "admin.user.edit"]);
这一步不能省略双引号包裹的"as",也不能写成as =>(缺少引号会解析失败);【命名必须唯一,重复会导致后注册的覆盖前一个】;建议统一用英文点号分隔层级,如admin.user.edit而非admin_user_edit。
若该路由位于通配符路由(如$routes->get('(:any)', ...))之后,则永远无法命中——命名路由匹配发生在路由解析早期,顺序错即失效。
生成URL:用route_to()而非硬编码路径
在视图或控制器中,用route_to()函数生成链接:
<a href="= route_to('admin.user.edit', 123) ?>">编辑用户</a>
这比base_url('admin/users/edit/123')安全得多:一旦你把/admin/users/edit/(:num)改成/manage/user/:id,所有route_to()调用自动生效,无需全局搜索替换。
注意:第二个参数必须是纯值(如123),不能传数组——CI4不支持命名路由批量填参;若需多个参数,改用route_to('named.route', $id, $token)并确保路由定义中对应位置有占位符(如'Admin::detail/$1/$2')。
重定向时传递参数:必须用自定义redirect_to()
默认redirect()不支持参数传递,直接写redirect()->route('admin.user.edit', 456)会报错。
开箱即用的技能链路由引擎。13 条预定义链覆盖搜索、开发、审查、MLOps、法律、创意等场景,三层路由架构(触发词→SAD反馈→DAG编排),recall@10=96.97%。配置驱动(chains.yaml),零代码扩展。pip install skill-weave-chains 一键安装。
方法一:在app/Common.php中定义辅助函数
function redirect_to(string $name, ...$params): \CodeIgniter\HTTP\RedirectResponse { return redirect()->route($name, $params); }
方法二:控制器内手动拼接(仅限简单场景)
return redirect()->to(route_to('admin.user.edit', $user->id));
方法三:使用命名路由+查询参数组合(适用于非路径参数)
return redirect()->route('admin.user.list')->with('message', '更新成功');
【切勿在Common.php里覆盖原生redirect()函数名,会造成Spark命令失效】
调试与验证:三步确认命名路由已生效
第一步:运行php spark routes,检查输出列表中是否存在admin.user.edit及其对应URI模式;
第二步:清除路由缓存php spark cache:clear,避免旧配置残留干扰;
第三步:在浏览器访问http://localhost/index.php?debug=1(需CI_ENVIRONMENT=development),查看Debug Toolbar → Routes面板,实时观察当前请求匹配到的命名路由名称。


















