2009-12-18 102 views
4

我有一個控制器,它有幾個方法應該都共享公共信息。比方說,我的URI格式是這樣的:將參數傳遞給控制器​​的構造函數

http://server/users/id/admin/index 
http://server/users/id/admin/new 
http://server/users/id/admin/list 
http://server/users/id/admin/delete 

我需要從數據庫中檢索一些信息,對id並讓他們提供的所有方法,而不是在他們每個人寫一行調用模型。我怎樣才能做到這一點?

回答

4
class users extends Controller { 

private $mydata = array(); 

function users() 
{ 
    parent::Controller(); 
    .... 

    $this->mydata = $this->model->get_stuff($this->uri->segment(2)); 
} 

function index() 
{ 
    $this->mydata; //hello data! 
} 

在這裏我簡單的硬編碼的數組(這可能是一個非常如果需要的話,你可以將數據存儲在codeigniter會話中Codeigniter可以將這些數據存儲在一個cookie中(如果總數小於4kb)否則你可以在數據庫中存儲更大的數據blob文檔如何做到這一點)

參見:http://codeigniter.com/user_guide/libraries/sessions.html

小節:保存會話數據到數據庫

下面是一些會話練習:

+0

'$ this-> uri-> segment()'是一樣好,它得到 –

0

如果這不能從CodeIgniters Hook mechanism解決,您可以重寫控制器中的構造函數方法並調用您自己的方法。從their SVN repository來看你可能會做一些這樣

class YourController extends Controller 
{ 
    function YourController() 
    { 
     parent::Controller(); 
     $this->_preDispatch(); 
    } 

    function _preDispatch() 
    { 
     // any code you want to run before the controller action is called 
    } 

可能是調用preDispatch必須調用父面前。試試吧,看看它是否有效。我不知道他們仍然使用PHP4語法。呃:(

+0

好問題越來越'id'發揮作用:我知道如何得到它內部方法但不在構造函數中。順便說一下,您也可以使用codeigniter使用PHP5語法。 –

+0

如果CI的獲取id的方法尚未在構造函數中使用,仍然可以從$ _SERVER superglobal中的Request-URI解析它。 – Gordon

+0

是的我想我可以做到這一點,我正在尋找一個比手動解析$ _SERVER ['REQUEST_URI']更乾淨的解決方案。畢竟這是一個框架應該做的。 –

-2

根據您的網址結構,以及codeignitor使用MVC模式的事實,我假設您使用mod_rewrite將url路徑格式化爲index.php的查詢字符串。如果這是情況下,「ID」的值應該可以在$ _REQUEST [「身份證」]在腳本執行任何一點......

+0

不,這不是它的工作原理。 –

+0

對不起,不熟悉codeignitor,只是基於它將使用mod_rewrite的所有結構假設。但你知道他們說什麼假設.... – eCaroth

相關問題