2016-12-02 6 views
0

私は最近、OOPとCodeigniterを学び始めました。私はコアに2つの新しいファイルを設定しました。 CI_Controllerを拡張するMY_Controller.phpとCI_Modelを拡張するMY_Model.php。これらのファイルは両方とも動作しています。さまざまなコントローラとモデルでメソッドを呼び出すことができます。しかし、MY_Controllerには、ユーザーがログインしているかどうかをチェックするメソッドがあります。その場合は、ユーザーテーブルの最後のアクティブなフィールドを更新するMY_Modelからメソッドを呼び出します。私が言うLogin_modelからそれを呼び出すときに、この方法が働いているが、私はMY_Controllerからそれを呼び出すときにエラーを渡しますコードネーター:コントローラークラスからモデルメソッドを呼び出す方法は?

Call to undefined method 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:@Tiger応答に更新

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(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

あなたはupdate_last_activeメソッドを使用するようにMY_Modelインスタンスを作成する必要があります。コントローラーにはその名前のメソッドがありません。 –

答えて

1

あなたがロードされませんでしたコントローラーのモデル、my_controllerでモデルをロード

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

     //load the model 
     $this->load->model('My_Model'); 

    } 

これで問題は解決します。 LOGGED_IN機能はあまりにもいくつかのエラーを持っている、(_constructでモデルをロードしてみてください)最初

+0

また、短い名前のモデルを2番目のパラメータとしてロードすることもできます。 '$ this-> load-> model( 'My_Model'、 'MM')'となります。この方法では、アクセスするたびに長いモデル名を入力する必要はありません。 '$ this-> MM-> model_method($ method_parameters)' –

0

コントローラファイル:

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; 
     } 

    } 
+0

説明の中には、回答の質を大幅に向上させるものがあります。 – mrun

関連する問題