|
本帖最后由 onenature 于 2011-5-26 15:53 编辑
自定义404控制器调用 __construct() 方法之前要进行检查:
PHP复制代码 $CI = & get_instance();
if(! $CI)
parent::__construct();
复制代码
这样是比较保险的办法.
事情是这样滴.
这两天在用CI做一个项目, 自定义了404页面. 设置非常简单, 在 application/config/routs.php 里直接修改就OK了. 这步没问题.
于是专门新建了一个 controller 用来输出404页面. 问题来了, 当我访问一个不存在的控制器时, 正确跳到 404并显示正常.
但是当访问一个已知控制器的一个未定义方法时页面却显示我的 404 控制器脚本有问题. 需要用到的library未定义, 如'session'等.
仔细研究了下, 发现这个访问过程中会创建两个CI控制器, 一个是访问的页面,另一个是跳转到的404页面. 另外考虑到 CI 是一个全局对象, 就在想是不是两个CI同时存在的情况下, 对全局单例(不知道这么理解是否正确)$CI 的初始化会形成冲突. 所以我将 404 控制器里的 parent::__construct() 脚本注释掉. 再测试访问一切正常.
不晓得这个算是BUG还是什么. 纠结了好几天, 今天发现后赶紧把这个拿出来分享下. 希望有类似问题的同学不再为此烦恼.
:)
|
评分
-
查看全部评分
|