2011-01-09 14 views
3

私はCIのAuth Tankライブラリを使用して特定のユーザのレコードを問い合わせています。コンストラクタからのCodeigniter変数は定義されていません

変数$user_id = tank_auth->get_user_id();は、セッションからユーザーIDを取得します。私はレコードを引っ張りたい。user_id = $user_id

私が理解したところでは、コンストラクタはクラスが開始されるたびに変数をロードできます。グローバル変数のような並べ替え。モデルコンストラクタに$user_idを設定して、モデルクラス内の複数の関数に使用できるようにしました。

class My_model extends Model { 

    function My_model() 
    { 
     parent::Model(); 
     $user_id = $this->tank_auth->get_user_id();  
    } 

     function posts_read() //gets db records for the logged in user 
    {  
     $this->db->where('user_id', $user_id); 
     $query = $this->db->get('posts'); 
     return $query->result(); 
    } 
} 

次に、コントローラに配列を作成し、foreachループがあるビューにデータを送信します。

テストするとき、私は

メッセージ取得:未定義の変数は:私のモデルに

をUSER_ID。しかし、私がposts_read関数に変数$user_idを定義しても機能しますが、それを必要とするすべての関数で定義したくありません。

私はここで間違っていますか?

答えて

8

グローバルスコープに変数のスコープの問題を、それを引き出します。それは同様に、このように他の機能で利用できるようにするには、クラスレベルの変数を作成する必要があります。

class My_model extends Model { 
    private $user_id = null; 

    function My_model() 
    { 
     parent::Model(); 
     $this->user_id = $this->tank_auth->get_user_id();  
    } 

     function posts_read() //gets db records for the logged in user 
    {  
     $this->db->where('user_id', $this->user_id); 
     $query = $this->db->get('posts'); 
     return $query->result(); 
    } 
} 

お知らせ$user_idのほか、後$this->user_idで使用されるクラス宣言の後に:)

+0

ありがとう!それはクラスレベルのvarなしで動作するようです。それは大丈夫ですか? – CyberJunkie

5

class My_model extends Model { 

    $user_id = 0; 

    function My_model() { 
     parent::Model(); 
     $this->user_id = $this->tank_auth->get_user_id();  
    } 

    function posts_read() //gets db records for the logged in user {  
     $this->db->where('user_id', $this->user_id); 
     $query = $this->db->get('posts'); 
     return $query->result(); 
    } 
} 
+0

をありがとう!ちょうど不思議で、なぜあなたは '$ user = 0;'を入れましたか? – CyberJunkie

+0

@Cyber​​Junkie SafrazがNULLを持つのと同じです。私は誰も彼のidとして '0'を持たないので、本当の価値でそれを初期化しました。 「NULL」と「0」の両方が問題ありませんIMO – DrColossos

関連する問題