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

[已解决] 2.0 为什么不能扩展Controller呢?

[复制链接]
发表于 2011-3-16 18:14:19 | 显示全部楼层 |阅读模式
我想实现一个后台的是否登录的验证功能.
然后所有的控制器都继承那个有验证功能的控制器..
可就是一直报错..说我扩展的那个class不存在.


1.png 2.png 3QQ截图未命名.png
发表于 2011-3-16 20:09:14 | 显示全部楼层
请看:http://codeigniter.org.cn/user_guide/general/core_classes.html
你的设置里以 MY_ 开头,而你的扩展是 lcm 开头,不符合手册,仔细看看手册吧。
发表于 2011-3-17 10:03:08 | 显示全部楼层
类名和文件名要相同~
 楼主| 发表于 2011-3-17 10:03:56 | 显示全部楼层
请看:
你的设置里以 MY_ 开头,而你的扩展是 lcm 开头,不符合手册,仔细看看手册吧。 ...
Hex 发表于 2011-3-16 20:09


但是我看了那個stblog 他的配置文件也是MY_开头 但是他的类名也没有以MY_开头啊.
而是写的:ST_Controller
和ST_Auth_Controller
 楼主| 发表于 2011-3-17 10:06:43 | 显示全部楼层
而且我换成 class MY_Controller extends CI_Controller{

}
他一样报 MY_Controller 不存在...
 楼主| 发表于 2011-3-17 10:13:44 | 显示全部楼层
我知道什么原因了...
因为我的扩展是放在application/libraries文件夹中

2.0是更新 放在 core中....
而且类名可以随便取...只要文件名按配置文件中的开头写就OK了!
 楼主| 发表于 2011-3-17 10:14:34 | 显示全部楼层
还有一点 构造函数一定是public...不然也报错.
发表于 2011-3-20 15:15:43 | 显示全部楼层
楼主,我出现的情况有点奇怪,
在config.php中是设置用MY_为前缀的。
我扩展的controller代码(放在application/core下)如下:
class MY_Controller extends CI_Controller
{
    public function __construct()
    {
        parent::__construct();
    }
    public function is_logged_in()
    {
        $a=12;
        return $a;
    }
}


在controller中ajia.php中引用它,代码如下:
class Ajia extends MY_Controller
{
    public function __construct()
    {
        parent::__construct();
    }

    public function index()
    {
          echo $this->is_logged_in();
          $this->load->view('try_view');

    }
}

在'try_view'试图中用<?php echo $this->is_logged_in();?>调用
但现实错误:
12
Fatal error: Call to undefined method CI_Loader::is_logged_in() in E:\wamp\www\ci\application\views\try_view.php on line 11



现象是这样的:
1、在ajia.php中可以使用echo $this->is_logged_in();来输出,正面可以使用MY_Controller这个扩展,但不明白的是,为什么是$this->is_logged_in();的写法,而不是$this->controller->is_logged_in();的写法,因为在其他核心类中都是使用$this->核心类名(小写)->方法的形式;

2、在试图中这个输出该怎么写,还是echo $this->is_logged_in();这样????
 楼主| 发表于 2011-3-21 12:03:52 | 显示全部楼层
楼主,我出现的情况有点奇怪,
在config.php中是设置用MY_为前缀的。
我扩展的controller代码(放在applica ...
wsluozefeng 发表于 2011-3-20 15:15


你在视图中调用扩展类 肯定不行了.
他没有在类中了.
他的load view是加载了一个视图.切换了场景了.
所以你要用到神器CI=&get_instance();
然后在 echo $CI->is_logged_in();
就OK啦.
发表于 2011-8-3 19:04:55 | 显示全部楼层
我也是跟你一样的情况,感谢你的发现 我的问题也解决了
但是,帅哥 ,你那是怎么报错呢,我只是页面什么都没有~  

本版积分规则