从codeigniter库调用模型显示错误

时间:2013-10-07 07:07:01

标签: php codeigniter model static-libraries

您好我在Auth.php中创建了一个库application/libraries来验证当前用户是否已登录。所以我的控制器是:

$session_data = $this->session->userdata('logged_in');
$this->load->library('Auth');
$auth = new Auth;
$user_id = $auth->authenticate($session_data);

图书馆:

class Auth{
    function authenticate($vars){

        $CI =&get_instance();
        $CI->load->model('adminmodels/login_model');

        $username = $vars['username'];
        $password = $vars['password'];
        $user_id = $vars['user_id'];;
        $user_type = $vars['user_type'];

        $check_login = $this->login_model->login($username,$password); //Line 14

        if($check_login){
            $user_id = $user_id;
        }else{
            $user_id = 0;
        }

        return $user_id;
   }
}

但它显示的错误如下:

  

遇到PHP错误

     

严重性:注意

     

消息:未定义属性:Auth :: $ login_model

     

文件名:libraries / Auth.php

     

行号:14

我做错了什么?

2 个答案:

答案 0 :(得分:1)

虽然通常是正确的,但在CI中你应该像这样调用库,而不是使用new关键字:

$this->load->library('Auth');
$user_id = $this->auth->authenticate($session_data);

此外,由于您已将全局CI对象分配给变量,因此无法使用$this来引用它:

    $check_login = $this->login_model->login($username,$password); //Line 14

应该是:

    $check_login = $CI->login_model->login($username,$password); //Line 14

(因为你在那里加载了模型:$CI->load->model('adminmodels/login_model');

答案 1 :(得分:0)

在Codeigniter库文件中,您无法在没有CI实例对象/变量的情况下使用$ this加载任何模型,配置或任何外部库

对于第14行的Auth.php案例,你错了:

$check_login = $this->login_model->login($username,$password); //Line 14

它应该是这样的(如果仅从内部函数访问):

$check_login = $CI->login_model->login($username,$password); //Line 14

或者,如果从Auth类中的任何函数访问:

$check_login = $this->CI->login_model->login($username,$password); //Line 14

但首先,您必须在构造函数中创建CI intance对象,如下所示:

$this->CI =&get_instance();
$this->CI->load->model('adminmodels/login_model');
在您采取上述第二种选择之前

可以帮你... 感谢