2011-01-09 80 views
3

我正在使用CI的Auth Tank庫來查詢某些用戶的記錄。來自構造函數的Codeigniter變量未定義

變量$user_id = tank_auth->get_user_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

謝謝!它似乎也沒有類級別的變種。這樣好嗎? – 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與使用NULL的Safraz相同。我用一個真實的值初始化它,因爲沒有用戶將'0'作爲他的id。 'NULL'和'0'都很好IMO – DrColossos