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

[控制器] 控制器放到子目录下时$this->uri->assoc_to_uri()获取错误

[复制链接]
发表于 2018-3-15 00:24:54 | 显示全部楼层 |阅读模式
本帖最后由 pepsi8 于 2018-3-15 00:27 编辑

根据控制器放到子目录的示例:http://codeigniter.org.cn/user_guide/general/controllers.html#id9

控制器 /application/products/Shoes.php 源码如下:
PHP复制代码
class Shoes extends CI_Controller {
        public function show(){
                print_r($this->uri->uri_to_assoc());
                print_r($this->uri->ruri_to_assoc());
        }
}
复制代码


访问地址: http://127.0.0.1/index.php/products/shoes/show/id/2
运行结果如下:
TIM图片20180315001551.png
由此可见:当控制器放到子目录时,使用 ruri_to_assoc() 获取到的URI关联数组是正确的。
但是手册中对 ruri_to_assoc() 的解释是:当你使用 CodeIgniter 的 URI 路由 功能时,该方法和 uri_to_assoc() 类似, 只是它用于将路由后的 URI 的段转换为一个包含键值对的关联数组。
我 config/routes.php 中除了默认内容,没有添加其他规则,获取URI关联数组,不应该是用 uri_to_assoc() 吗?
难道不是只有在 routes.php 中设置了路由规则才算使用路由?
还是说把控制器放到子目录,也算使用路由?

哪位了解这个问题,能否给个明确解释?非常谢谢!
发表于 2018-3-21 09:34:50 | 显示全部楼层
对比两个输出的数组可以看出,两者的区别就是:转换键值对所用的URI段不同,一个是用“show/id/2”,一个是用“id/2”;
估计是为了适应不同方式的控制器吧:如果控制器的所有逻辑在index函数中实现的话,应该用前一个;如果用控制器下面的函数来实现业务逻辑,就应该用后一个。
这是我的理解。

本版积分规则