在非对象上调用成员函数userdata()

时间:2012-04-11 12:29:41

标签: php codeigniter

大家好,我有一个代码可以给我这个错误

  

致命错误:第3行的C:\ wamp \ www \ project \ application \ controllers \ admin \ home.php中找不到类'MY_Controller'

我不知道为什么会出现这个错误...

C:\ wamp \ www \ project \ application \ controllers \ admin \ home.php的代码是

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class Home extends MY_Controller {

function index()
{
    redirect('admin/login');
}

function logout()
{
    $this->session->unset_userdata('logged_in');
    //session_destroy();
    redirect('admin/login');
}
}
?>

C:\ wamp \ www \ project \ application \ libraries \ MY_Controller.php的代码是

<?php

class MY_Controller extends CI_Controller {
public function __construct() {
    parent::__construct();
    if (!$this->session->userdata('logged_in')) {
        redirect('admin/login');
    }
}

}

如果我放置

  

class Home扩展了CI_Controller

而不是

  

class Home扩展了MY_Controller

中的

  

C:\瓦帕\ WWW \项目\应用\控制器\管理员\ home.php

文件并尝试加载

  

C:\瓦帕\ WWW \项目\应用\库\ MY_Controller.php

的构造函数中的

  

C:\瓦帕\ WWW \项目\应用\控制器\管理员\ home.php

显示

  

在非对象

上调用成员函数userdata()

为什么会这样?

2 个答案:

答案 0 :(得分:5)

扩展System类时,需要将类文件放到core而不是library文件夹中。将MY_Controller.php放在core文件夹中。

答案 1 :(得分:0)

请参阅文档:http://codeigniter.com/user_guide/general/core_classes.html

核心控制器需要存储在application/core/

所以当你扩展一个对象时,它会在那里寻找它。库文件夹用于存储“外部”库,您必须在控制器中明确包含这些库:

例: $this->load->library('class name');

此处有关图书馆的信息:http://codeigniter.com/user_guide/general/libraries.html