2011-07-08 170 views
1

是否可以將以下代碼添加到多個函數中,而無需單獨重新輸入代碼?Codeigniter將變量傳遞給多個控制器功能

$user_id = $this->tank_auth->get_user_id(); 
$data['row'] = $this->Profile_model->profile_read($user_id); 

我試圖把這些變量在構造函數中,但我得到兩個未定義的變量。

回答

2

,你可以把它在控制器的私有函數,即

private function get_user_id() 
{ 
    $user_id = $this->tank_auth->get_user_id(); 
    return $this->Profile_model->profile_read($user_id); 
} 

然後在你的控制每一個功能做到:

$data['row'] = $this->get_user_id(); 
+0

謝謝!我只是想知道爲什麼你使用'protected'而不是'private'? – CyberJunkie

+1

哈 - 對不起,我的意思是私人的!需要睡眠:) –

+0

heh沒問題:)我只是在想如果'protected'提供了更大的優勢。 – CyberJunkie

0

那麼,如果你把它放在構造你需要:

$this->user_id = $this->tank_auth->get_user_id(); 
$this->data['row'] = $this->Profile_model->profile_read($user_id); 
+0

謝謝我嘗試過,但我得到'無法訪問空屬性'爲 – CyberJunkie

-2

你加載了tank_auth庫還是將它設置爲autoload?

1

它只會爲您節省一行,但代碼行數量會減少100%!

private function rowData(){ 
    $user_id = $this->tank_auth->get_user_id(); 
    return $this->Profile_model->profile_read($user_id); 
} 

$data['row'] = $this->rowData(); 
0

您可以將此作爲控制器的構造函數:

class Example extends CI_Controller { 

    protected $user_id; 

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

     $this->load->library('tank_auth'); 
     $this->load->model('Profile_model'); 

     $this->user_id = $this->tank_auth->get_user_id(); 
     $data['row'] = $this->Profile_model->profile_read($this->user_id); 

     $this->load->vars($data); 
    } 

} 

,你將有機會獲得$行從構造函數加載的任何後續視圖,以及能夠使用$這 - > user_id在該控制器的任何功能中。

來源:http://codeigniter.com/user_guide/libraries/loader.html

+0

謝謝,我曾嘗試把代碼放在構造函數中,但是我在'$ user_id'中獲取未定義的變量,無論我嘗試在控制器函數中使用它。 – CyberJunkie

+0

檢查對示例的更改,在您希望使用它的任何控制器函數中使用$ this-> user_id,然後在任意視圖中使用$ row。那是你想要做的嗎? – tgriesser

+0

thx,也試過,並得到'不能訪問空的屬性' – CyberJunkie

相關問題