我正在使用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()在users_model.php的非对象上XX行",指的是validate()函数的第一行。
我可以得到它的工作通过使用双冒号(::)操作符在登录控制器如Users_model::validate(),但我认为我不应该需要它。
我也可以通过这样写来使它工作:
$ci = get_instance();
$ci->db->where...
在Users_model->validate()函数的开头,但我认为我也不需要这样做。
数据库类正在autoload.php中加载。
所以问题是我的模型中的$this指的是模型类本身,而不是它应该的"超级对象"。我没有剩下的动作了,我猜这是很简单的事情,但我就是看不出来。
请尝试像这样加载CI库
$this->load->library('database');
在__construct()函数加载模型之前:或者从自动加载文件中加载此库,如:
$autoload['libraries'] = array('database','form_validation', 'session');