個人而言,我會擴展控制器庫(通過遵循Creating Libraries at codeigniter.com底部的指導創建一個MY_Controller)。
你會像平常一樣使用你的模型等。然後,你會在你的MY_Controller類中創建一個私有函數來獲得相關的「全局」數據,並調用
$this->load->vars('everywhere_data', $data_from_relevant_models);
這將使該數據可從該點調用的所有意見爲$everywhere_data
。然後在MY_Controller的構造函數中添加一個對該函數的引用,或許通過條件檢查用戶實際登錄。
如果收集並獲取所有數據很複雜,那麼可以編寫一個庫來處理它對你來說,但'控制器'部分仍然會由MY_Controller完成:即獲取數據,然後使用load-> vars()將其發佈到視圖。
作爲一個快速和未經考驗的例子,MY_Controller將開始類似如下:
<?php
class MY_Controller extends Controller
{
private $logged_in_user;
function MY_Controller()
{
parent::Controller();
if($this->_logged_in_userid() > 0)
{
$this->logged_in_user = $this->_get_user($this->logged_in_userid());
$this->load->vars('logged_in_username', $this->logged_in_user->username);
} else {
$this->logged_in_user = false;
}
}
...
}
注意的東西像_logged_in_userid()
將訪問你的會話(例如return $this->session->userdata('logged_in_userid');
)和_get_user()
將訪問相關機型。
最後,你將有一個(在我的第一個例子或everywhere_data
)訪問$logged_in_username
,你會打電話到您的標題視圖等,這讓你的正常控制器整潔,使他們能夠專注於提供其特定的功能,阻止你重寫你的代碼幾次,並維護MVC的理想。
非常有用,也是一個非常有趣的做法。非常感謝您的幫助和想法:) – rkj 2010-06-03 06:14:15
沒問題!這就是這個網站的全部內容!毫無疑問,你會盡快回答我提出的問題:) – Kurucu 2010-06-03 11:03:42