CodeIgniter - 在Model上的非对象上调用成员函数....

时间:2013-03-09 12:37:15

标签: codeigniter php

我正在使用CI 2.1.3,我遇到了加载模型和引用CodeIgniter“超级对象”的问题。

例如:

我正在尝试使用我的登录控制器登录:

class Login extends CI_Controller {

    public function __construct()
    {
        parent::__construct();
        $this->load->model('Users_model');
    }

    public function validate_credentials() {
        $this->load->library('form_validation');
        // Some form validation here...

        $query = $this->Users_model->validate();

        if($query) {    // if the user's credentials validated...
            // something
        } else {
            // something
        }
    }

当它到达我的Users_model时:

class Users_model extends CI_Model {

public function __construct()
{
    parent::__construct();
}

public function validate()
{
    $this->db->where('active', 1);
    $this->db->where('email', $this->input->post('email'));
    $this->db->where('password', md5($this->input->post('password')));
    $query = $this->db->get('user');

    if($query->num_rows == 1)
    {
        return $query;
    }

}
}

我收到错误“致命错误:调用成员函数where()在第XX行的users_model.php中的非对象上”指向validate()函数的第一行。

我可以通过在Login控制器中使用双冒号(::)运算符来实现它,比如Users_model :: validate(),但我认为我不应该需要它。

我也可以通过编写类似的东西来实现它:

    $ci = get_instance();
    $ci->db->where...

在Users_model-> validate()函数的开头,但我认为我不应该这样做。

数据库类正在autoload.php中加载。

所以问题是模型中的 $ this 指的是模型类本身而不是它应该的“超级对象”。我没有动作,我猜它是关于一些非常简单的东西,但我只是看不到它。请帮帮我。

1 个答案:

答案 0 :(得分:1)

请尝试加载 CI库,如下

  $this->load->library('database');
在加载模型之前<_>在__construct()函数中: 或者从自动加载文件中加载此库,如:

$autoload['libraries'] = array('database','form_validation', 'session');