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

[已解决] 控制器index不能使用,非得使用其他名称,这是为何?

[复制链接]
发表于 2011-1-12 11:09:10 | 显示全部楼层 |阅读模式
/article/index/123这样可以,里面调用参数$this->uri->segment(3);

一般来说
/article/123
这样子就可以吧,然后我$this->uri->segment(2);
可是/article/123这样的方式就是不行,显示这样的错误:
A PHP Error was encountered

Severity: Warning

Message: Cannot modify header information - headers already sent by (output started at /home/root/domains/root.com/public_html/index.php:9)

Filename: codeigniter/Common.php

Line Number: 360


后来我修改为这样子:

/article/view/123

参数用$this->uri->segment(3);


这样就能正常显示。

请教为何index不起作用呢?非得另外弄一个function view 才可以。不知道是不是我那里设置错了?我默认的controller是welcome,改为index也不行。
我最终的url是要更简洁些,不想要view也不要index显示。
发表于 2011-1-12 11:36:05 | 显示全部楼层
这样子啊 最好使用ci的路由,不用暴露出controller和action,我看很多地方都是这么用的
发表于 2011-1-12 13:40:28 | 显示全部楼层
这个是 CI 的规定,楼主不要自己去猜测。
如果有参数 index 就是必填的,CI 的 URL 就是 控制器/方法/参数
如果要改变,必须用 URI 路由。
 楼主| 发表于 2011-1-13 10:42:40 | 显示全部楼层
这个是 CI 的规定,楼主不要自己去猜测。
如果有参数 index 就是必填的,CI 的 URL 就是 控制器/方法/参数
...
Hex 发表于 2011-1-12 13:40



   按老大的提示搞到了,我在system/application/config/routes.php里加入$route['article/:any'] = "article/view";
就可以了。
感谢!
发表于 2012-12-11 00:13:08 | 显示全部楼层
因为 类名称是index 而方法又是index,这样index函数就是php4中的构造函数,即实例化类时,直接执行这个函数而没有执行父类的构造函数,也就没有初始化CI核心类。所以会提示没有定义属性或方法了。

用index类名也可以,在

public function index() 方法前加上,调用父类的构造方法

public function __construct()
{
  parent::__construct();
}

这个原理是:当类中同时存在php4和php5的构造函数时,只执行php5 的 __construct();。

当在index方法中加上 parent::__construct()又会出现什么呢?
function index()
{
parent::__construct();
$this->load->view('.......');
}

重复执行了两次 index方法。第一次php4的构造函数,第二次CI的index方法。

大家可以试试!

本版积分规则