我最近开始学习OOP和Codeigniter。我在核心设置了2个新文件; MY_Controller.php扩展CI_Controller和扩展CI_Model的MY_Model.php。这些文件都有效,我可以在各种控制器和模型中调用它们的方法。但是,我在MY_Controller中有一个方法来检查用户是否已登录,如果是,则调用MY_Model中的方法来更新用户表中的最后一个活动字段。当我从Login_model调用它时,此方法正在工作,但是当我从MY_Controller调用它时,它传递了一个错误:
调用未定义的方法Feed :: update_last_active()
这是为什么?我试图从我的核心控制器调用核心模型,我不应该这样做吗?以下是我的代码。
MY_Controller.php:
class MY_Controller extends CI_Controller{
public function __construct(){
parent::__construct();
}
/**
* Check if the users sessions logged in
*/
public function logged_in(){
//Check the flag logged_in exists in the session
if ($this->session->userdata('logged_in')){
//Update the last active field in the user db
$this->update_last_active($this->session->userdata('user_id'));
return true;
} else {
return false;
}
}
}
MY_Model.php:
class MY_Model extends CI_Model{
/**
* Updates users last active
*/
public function update_last_active($id){
$this->db->where('id', $id);
$this->db->update('users', array('last_active' => date('Y-m-d H:i:s')));
}
}
MY_Controller更新为@Tiger响应(返回Call to undefined method CI_Loader::update_last_active()
):
public function logged_in(){
//Check the flag logged_in exists in the session
if ($this->session->userdata('logged_in')){
//Load my model
$my_model = $this->load->model('MY_Model');
//Update the last active field in the user db
$my_model->update_last_active($this->session->userdata('user_id'));
return true;
} else {
return false;
}
}
答案 0 :(得分:2)
控制器文件:
public function __construct(){
parent::__construct();
$this->load->model('My_Model'); //Load the Model here
}
public function logged_in(){
if ($this->session->userdata('logged_in')){
//Now Load Only Model Method
$my_model = $this->MY_Model->update_last_active();
$my_model->update_last_active($this->session->userdata('user_id'));
return true;
} else {
return false;
}
}
答案 1 :(得分:1)
您没有在控制器中加载模型,在my_controller中加载模型
public function __construct(){
parent::__construct();
//load the model
$this->load->model('My_Model');
}
这应该可以解决问题。 logged_in函数也有一些错误,请尝试首先在_construct()中加载模型