2011-11-19 59 views
0

我添加了一些變量來了「是CI_Controller」級的底部,像這樣:如何使變量在Codeigniter中的所有控制器中都可訪問?

$data['foo'] = 'bar'; 
$data['animal'] = 'dog'; 
$data['justin_beiber'] = 'terrible'; 

因爲我想這些變量在我的所有控制器和因爲所有的控制器訪問擴展了這個是CI_Controller,我想這將工作:

echo $data['foo']; 
die(); 

我把它放在一個擴展CI_Controller的控制器。但它不輸出任何東西。如何讓這個工作?

回答

0

也許正確使用配置選項會幫助你。

http://codeigniter.com/user_guide/libraries/config.html

您可以從CI結構的任何地方撥打一個配置項。

以及爲什麼你的變量沒有迴應:你可以在一個類中設置受保護的變量,通過繼承來使它們可見,但我認爲這不是最好的方式去做這件事。至少不知道爲什麼你希望$ data ['foo']在任何地方都可以使用,而無需使用助手。

+0

謝謝,這似乎是一個好主意。然而,這是我的最終目標:我想在所有的觀點中使所有這些變量都可以使用。但現在我必須做這樣的事情:$ data ['foo'] = $ this-> config-> item('foo');我必須在每個控制器中執行此操作。有沒有辦法將這些變量傳遞到我的$ data變量中,以便當我從我的控制器傳遞這個變量時,$ data變量會自動包含所有那些以前在配置文件中定義的變量?基本上我不想在每個控制器中重複這個變量賦值代碼。 – TK123

+0

也許嘗試用MY_Controller擴展控制器,然後調用$ this-> load-> vars(array('foo'=>'whatever'));在構造函數中... – landons

+0

我或多或少意味着您可以調用$ this-> config-> item('foo')來取代$ data ['foo']或者只是$ foo,但這不是真正的答案對你的問題。至少配置選項是一個選項。 –

2

確保你的extend your main controller and not modify it。另外,還要確保你的控制器擴展新的控制器(MY_controller),而不是原來的,因爲我們有這樣的事:

class MY_Controller extends CI_Controller { 
// constructor and variables defined here 
} 

另外請注意,你必須打電話給你的變量,像這樣:$this->foo['bar'],如果你決定使用這樣...對於'普通'變量呼叫($foo['bar']),請使用CI helperautoload它。

相關問題