You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CodeIgniter4命名路由下redirect重定向函数传递参数方法问询

CodeIgniter 4 命名路由重定向传参问题解答

可以实现你的需求,你提到的两种写法不符合CodeIgniter 4的语法规范,调整写法即可达到预期效果。


1 先修正路由定义

你当前的路由定义缺少参数占位符,无法匹配$1参数,需要调整为:

// 示例用(:num)限制参数为数字,可根据需求换成(:any)等匹配规则
$routes->get('edit/(:num)', 'Test_Controller::editTest/$1', ["as" => "editTest", "filter" => 'testFilter']);

2 正确的重定向写法

CodeIgniter 4 提供了专门的方法实现命名路由重定向传参,有两种常用写法可选:

写法A:用redirect()->route()直接传参

return redirect()->route('editTest', [$passingID]);

如果需要传入多个参数,按路由占位符的顺序放在数组中即可,比如路由为edit/(:num)/(:any),就写[$id, $slug]。

写法B:用route_to()生成URL后重定向

return redirect(route_to('editTest', $passingID));

两种写法效果完全一致,可根据编码习惯选择。


3 你提到的两种写法错误原因

  • 写法1return redirect('editTest', array($passingID));:redirect()函数第一个参数默认识别为普通URL路径,不会匹配命名路由,且第二个参数不是路由参数传参位,因此无法生效。
  • 写法2return redirect('editTest')->with($passingID);:with()方法用于将数据写入Session闪存,跳转后仅能从Session中读取,不会拼接为URL参数、也不会匹配路由占位符,因此实现不了路由传参效果。

4 HMVC架构适配建议

针对你用HMVC架构存在同路由名的需求,可给不同模块的命名路由别名加模块前缀,比如blog_editTest、user_editTest,即可避免别名冲突,同时保持URL路径的规范统一。

内容的提问来源于stack exchange,提问作者Florianb

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 14:54:03