是否可以將以下代碼添加到多個函數中,而無需單獨重新輸入代碼?Codeigniter將變量傳遞給多個控制器功能
$user_id = $this->tank_auth->get_user_id();
$data['row'] = $this->Profile_model->profile_read($user_id);
我試圖把這些變量在構造函數中,但我得到兩個未定義的變量。
是否可以將以下代碼添加到多個函數中,而無需單獨重新輸入代碼?Codeigniter將變量傳遞給多個控制器功能
$user_id = $this->tank_auth->get_user_id();
$data['row'] = $this->Profile_model->profile_read($user_id);
我試圖把這些變量在構造函數中,但我得到兩個未定義的變量。
,你可以把它在控制器的私有函數,即
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();
那麼,如果你把它放在構造你需要:
$this->user_id = $this->tank_auth->get_user_id();
$this->data['row'] = $this->Profile_model->profile_read($user_id);
謝謝我嘗試過,但我得到'無法訪問空屬性'爲 – CyberJunkie
你加載了tank_auth庫還是將它設置爲autoload?
它只會爲您節省一行,但代碼行數量會減少100%!
private function rowData(){
$user_id = $this->tank_auth->get_user_id();
return $this->Profile_model->profile_read($user_id);
}
$data['row'] = $this->rowData();
您可以將此作爲控制器的構造函數:
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在該控制器的任何功能中。
謝謝,我曾嘗試把代碼放在構造函數中,但是我在'$ user_id'中獲取未定義的變量,無論我嘗試在控制器函數中使用它。 – CyberJunkie
檢查對示例的更改,在您希望使用它的任何控制器函數中使用$ this-> user_id,然後在任意視圖中使用$ row。那是你想要做的嗎? – tgriesser
thx,也試過,並得到'不能訪問空的屬性' – CyberJunkie
謝謝!我只是想知道爲什麼你使用'protected'而不是'private'? – CyberJunkie
哈 - 對不起,我的意思是私人的!需要睡眠:) –
heh沒問題:)我只是在想如果'protected'提供了更大的優勢。 – CyberJunkie