onenature 发表于 2011-5-26 14:19:42

自定义404页面小窍门

本帖最后由 onenature 于 2011-5-26 15:53 编辑

自定义404控制器调用__construct() 方法之前要进行检查:
$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还是什么. 纠结了好几天, 今天发现后赶紧把这个拿出来分享下. 希望有类似问题的同学不再为此烦恼.

:)


moxuanyuan 发表于 2011-8-8 14:15:16

我試了你的方法,還是不行啊

琳2014 发表于 2014-5-22 11:59:06

我的也是,试了,不好使
页: [1]
查看完整版本: 自定义404页面小窍门