2013-03-09 73 views
0

對非對象的成員函數調用......我正在使用CI 2.1.3,並且在加載模型和引用CodeIgniter「超級對象」時遇到了問題。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; 
    } 

} 
} 

我得到一個錯誤「致命錯誤:調用一個成員函數,其中的()對第XX行「users_model.php中的非對象」引用validate()函數的第一行。

我可以通過在Login控制器中使用雙冒號(::)運算符(如Users_model :: validate())來獲得它,但我認爲我不應該需要它。

我也可以把它寫類似的工作:在Users_model->的validate()函數的開始

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

,但我想我不應該需要做,要麼。

數據庫類正在autoload.php中加載。

所以問題是我的模型中的$ this指的是模型類本身,而不是它應該的「超級對象」。我沒有任何動作,我猜這是關於非常簡單的事情,但我看不到它。請幫幫我。

+0

我不理解爲什麼這被標記爲另一個也被標記爲重複的問題,當兩者都沒有具體回答這個問題時。請參閱:http://stackoverflow.com/q/8447565/594235 – Sparky 2014-10-28 14:36:50

回答

1

請通過加載模型之前加載CI庫這樣

$this->load->library('database'); 

在__construct()函數嘗試: 或像自動加載文件加載這個庫:

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

就像我已經說過的:「數據庫類正在加載autoload.php。」所以我在我的config/autoload.php中有這樣的一行:$ autoload ['libraries'] = array('database','session','template'); – 2013-03-09 14:54:09