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 你提到的两种写法错误原因
- 写法1
return redirect('editTest', array($passingID));:redirect()函数第一个参数默认识别为普通URL路径,不会匹配命名路由,且第二个参数不是路由参数传参位,因此无法生效。 - 写法2
return redirect('editTest')->with($passingID);:with()方法用于将数据写入Session闪存,跳转后仅能从Session中读取,不会拼接为URL参数、也不会匹配路由占位符,因此实现不了路由传参效果。
4 HMVC架构适配建议
针对你用HMVC架构存在同路由名的需求,可给不同模块的命名路由别名加模块前缀,比如blog_editTest、user_editTest,即可避免别名冲突,同时保持URL路径的规范统一。
内容的提问来源于stack exchange,提问作者Florianb
相关产品推荐
相关产品推荐

