用户
 找回密码
 入住 CI 中国社区
搜索
查看: 1352|回复: 9
收起左侧

[版本 2.x] 设置了路由,方法里面用segment怎么接收参数

[复制链接]
发表于 2016-4-11 10:13:20 | 显示全部楼层 |阅读模式
配置文件里面路由规则是默认的,如下:
$config['uri_protocol']        = 'AUTO';

配置路由规则如下:
$route['special/(\d+).html'] = "home/special_detail/$1";

访问地址:http://www.test.cn/special/21.html

在控制器里面接收参数id:
PHP复制代码
 
function special_detail(){
        $id = $this->uri->segment(3);print_r($id);die;
}
复制代码

打印结果为空,但是$this->uri->segment(2)打印结果却是21.html,为什么呢?怎么才能用上面的方法接收?
发表于 2016-4-11 11:13:03 | 显示全部楼层
沒記錯的話,可以這樣接收:
PHP复制代码
 
function special_detail($id){
        print_r($id);
        die();
}
 
复制代码
 楼主| 发表于 2016-4-11 13:02:53 | 显示全部楼层
Closer 发表于 2016-4-11 11:13
沒記錯的話,可以這樣接收:

谢谢,这样是可以的,但是想弄明白那样接收为什么不对?呵呵
发表于 2016-4-11 14:06:17 | 显示全部楼层
本帖最后由 Closer 于 2016-4-11 14:19 编辑
lshe2014 发表于 2016-4-11 13:02
谢谢,这样是可以的,但是想弄明白那样接收为什么不对?呵呵

與其說不對,不如說 $this->uri->segment() 是擷取真實的 URI

試試 $this->uri->rsegment() 呢 ?
 楼主| 发表于 2016-4-11 19:24:57 | 显示全部楼层
Closer 发表于 2016-4-11 14:06
與其說不對,不如說 $this->uri->segment() 是擷取真實的 URI

試試 $this->uri->rsegment() 呢 ? ...

$this->uri->rsegment(3)接收打印出来的就是21,达到想要接收的数据了。
但是我在另一个项目中,也是用segment来接收的,也是按路由 “=” 号右边的次序来接收的,
$this->uri->segment(3)也是21,这是为什么呢?
 楼主| 发表于 2016-4-11 19:26:23 | 显示全部楼层
lshe2014 发表于 2016-4-11 19:24
$this->uri->rsegment(3)接收打印出来的就是21,达到想要接收的数据了。
但是我在另一个项目中,也是用se ...

在本例中这样用却接收不到。
发表于 2016-4-11 19:46:09 | 显示全部楼层
lshe2014 发表于 2016-4-11 19:24
$this->uri->rsegment(3)接收打印出来的就是21,达到想要接收的数据了。
但是我在另一个项目中,也是用se ...

也許需要你提供另一個項目的 route 才能得知了
 楼主| 发表于 2016-4-15 19:10:49 | 显示全部楼层
Closer 发表于 2016-4-11 19:46
也許需要你提供另一個項目的 route 才能得知了

谢谢,原来是原来那个项目核心ruter被修改了
发表于 2016-4-16 19:55:43 CI中国手机版 | 显示全部楼层
rsegment 和 segment 有区别的,楼主看看手册吧

本版积分规则