2011-02-13 35 views
8

我有一個問題,因爲我需要一個全局靜態變量,我有問題是任何可能將它添加到application.ini文件,如何做到這一點?Zend,Application.ini中的全局變量?

或者我必須:

  1. 創建靜態變量抽象類,
  2. 註冊它合適的詞彙有來自所有應用程序訪問該變量(註冊它的引導文件)
  3. 我可以使用它,還是更容易,我的意思是「自動方式」來做到這一點?

感謝您的建議! Regars,

+0

配置文件旨在用於指定參數,用作應用程序的輸入lication。你不應該使用PHP全局變量以編程方式添加任何東西 – Phil 2011-02-13 23:49:07

回答

1

你可以在application.ini和Bootsrap.php中指定值,你讀它並保存在Zend_Registry中。你也可以使用PHP的定義方法來創建常量(如果你的可驗證是恆定的)。

+0

+1。因此繞過了在View中需要Zend靜態類訪問。 – Alex 2012-07-07 13:31:49

6

對我來說最好的解決方案是在index.php文件中創建一個變量。我添加了: 已定義('VARIABLE_NAME') || define('VARIABLE_NAME','Something here');

現在我可以從任何地方訪問它; D 非常感謝!

12

中的application.ini文件

someservice.apikey = 12345678 
someservice.passkey = 87654321 

在引導

public function _initSomeservice() 
{ 
    $someservice = $this->getOption('someservice'); 
    Zend_Registry::set('someservice', $someservice); 
} 

從註冊表

$config = Zend_Registry::get('someservice'); 
5

我不會使用合適的詞彙,也不常數,有兩個原因

  1. 在註冊表中你永遠不知道變量發生了什麼。應用程序的每個部分都可以改變它們,並且不會被注意到。我將註冊表實際上看作anit模式。
  2. 常量會不必要地污染您的應用程序。如果你爲每個配置使用一些常數?你必須保留一個額外的文件,並定義所有的常量,這很難維護。

什麼是最好的選擇是直接從引導獲取配置對象。在下面的例子中,我假設你在你的application.ini中有這個:

someservice.apikey = 12345678 
someservice.passkey = 87654321 

bootstrap被設置爲frontController中的一個參數。如果你有一個動作控制器,這使得它如此簡單:

$serviceOptions = $this->getInvokeArg('bootstrap')->getOption('someservice'); 

如果你在你的控制器實例化的服務,你現在可以把它們通過構造和/或setter。

如果你想獲得不在你的控制器內的選項,但在別的地方,你可以使用frontController實現的單例模式。因此,在任何地方(當然只是調度,而不是引導過程本身期間),你能做到這一點:

$frontController = Zend_Controller_Front::getInstance(); 
$serviceOptions = $frontController->getParam('bootstrap') 
            ->getOption('someservice'); 

通過以上方法你是安全的,你必須總是正確的配置選項,而不是一些可能突變的一個。

+0

這就是我一直在尋找的!謝謝! – VishwaKumar 2012-05-22 06:51:48

0

我剛剛添加了define('VARIABLE_NAME','Something here');自舉。 即時全局常量。

這些常數放入內受保護的_intiFuncName函數內引導的擴展類

0

我在的application.ini一系列具有以下命名約定常量:

system.image_path = "/assets/images" 
system.custom_path = "/assets/custom" 
system.cdn_URL  = "http://cdnurl.com" 

我只是在我的代碼中引用它們就好像它們是PHP常量一樣:

SYSTEM_IMAGE_PATH 
SYSTEM_CUSTOM_PATH 
SYSTEM_CDN_URL