如何在CodeIgniter中获取路由URL中的参数?(含重写路由场景)
在CodeIgniter中获取路由映射里的参数100
嘿,这个问题我太熟悉了!在CodeIgniter框架下,当你设置了$route['about-us']='sub-directory/article/read/100'这种静态路由后,想要拿到末尾的100参数,有几种简单可靠的方式:
1. 直接从控制器方法参数获取(最推荐)
这是CodeIgniter设计的标准用法——路由里的参数会自动传递给对应控制器方法的参数。你只需要在sub-directory/article.php的read方法里定义参数即可:
class Article extends CI_Controller { public function read($id) { // 这里的$id就是你要的100 echo $id; } }
这种方式最直观,也符合框架的MVC设计逻辑,优先用它准没错。
2. 使用URI类的rsegment方法
如果因为某些场景(比如在控制器之外的类或助手中)没法直接用方法参数,你可以借助CI的URI类,用rsegment方法获取路由解析后的原始URI段:
// 获取路由映射后的第4个URI段(索引从1开始) $id = $this->uri->rsegment(4);
这里用rsegment而不是普通的segment是关键:segment是针对用户访问的URL(也就是about-us),而rsegment会读取路由映射后的真实路径sub-directory/article/read/100,所以不会受用户输入URL的影响,更可靠。
3. 从Router类的rsegments属性读取
你已经在使用$this->router对象了,它的rsegments数组里就存着路由解析后的所有段信息:
// 同样索引从1开始,第4个元素就是参数100 $id = $this->router->rsegments[4];
这种方式和第二种本质是一样的,只是直接从Router对象里取数据,适合已经在操作$this->router的场景。
内容的提问来源于stack exchange,提问作者One-ear Hamster
相关产品推荐
相关产品推荐

