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

自定义404页面小窍门

[复制链接]
发表于 2011-5-26 14:19:42 | 显示全部楼层 |阅读模式
本帖最后由 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还是什么. 纠结了好几天, 今天发现后赶紧把这个拿出来分享下. 希望有类似问题的同学不再为此烦恼.

:)


评分

参与人数 1威望 +5 收起 理由
Hex + 5 我很赞同

查看全部评分

发表于 2011-8-8 14:15:16 | 显示全部楼层
我試了你的方法,還是不行啊
发表于 2014-5-22 11:59:06 | 显示全部楼层
我的也是,试了,不好使

本版积分规则