两条小溪 2016-04-11 02:41 采纳率: 0%
浏览 651

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

配置文件里面路由规则是默认的,如下:
$config['uri_protocol'] = 'AUTO';

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

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

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

打印结果为空,但是$this->uri->segment(2)打印结果却是21.html,为什么呢?怎么才能用上面的方法接收?

  • 写回答

1条回答 默认 最新

  • 你知我知皆知 2024-08-05 09:31
    关注

    以下回答参考 皆我百晓生券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。

    你使用了$this->uri->segment()函数来获取URL中的参数。这个函数接受三个参数:第一个参数是要从URL中提取的第一个部分(如果存在),第二个参数是要从URL中提取的第二个部分(如果存在),第三个参数是要从URL中提取的最后一个部分(如果存在)。如果你想要从URL中提取的是一个数字字符串,你需要将它转换为整数。

    在这个例子中,你的控制器函数special_detail()试图从URL中提取两个参数,并将其作为变量传递给函数。然而,由于$id是一个字符串而不是整数,所以 $this->uri->segment(3) 会返回一个空值。

    要解决这个问题,你可以修改你的控制器函数以检查和处理非整数值的情况。例如,你可以添加一个条件判断语句来检查字符串是否包含有效的数字,然后将字符串解析为整数。以下是一个示例:

    function special_detail() {
        if (preg_match('/\d+/', $this->uri->segment(3))) { // 检查是否有数字字符
            $id = $this->uri->segment(3);
        } else {
            $id = NULL; // 如果没有找到数字,则设置id为NULL
        }
        
        print_r($id);
    }
    

    这样,当URL中的字符串不是整数时,$id将会被设置为NULL,从而避免了错误。

    评论

报告相同问题?