2012-07-11 64 views
1

我試圖在Yii中構建自定義擴展,但無法訪問自定義配置。如何爲我的Yii擴展添加自定義配置

假設我有main.php如下:

'my_extension'=>array(
    'class'=>'ext.my_extension.my_extension' 
    'custom_config'=>array(
     'first_option'=>array(
      'active'=>true, 
      'custom_username'=>'username', 
      'custom_password'=>'password', 
     ), 
    ), 
), 

如何獲得訪問 '活動', 'custom_username' 和 'custom_password'?

在我的擴展,延伸CFormModel,我想:

Yii::app()->my_extension->custom_config['first_option']['custom_username']; 

但我得到的錯誤:

Property "my_extension.custom_config" is not defined. 

回答

8

這示數的原因是因爲你試圖訪問的Yii的屬性::應用程序(),這是不宣,一個數組中定義。 。

入口腳本(的index.php)通常創建Yii的對象這樣的..

require_once($yii); 
Yii::createWebApplication($config)->run(); 

在$配置變量是你main.config文件陣列,所以即使你加入數組索引,它在Yii :: app()的屬性中不匹配不會創建..

做一套定製CONFIGS,Yii提供我們params ..這可以作爲Yii::app()->params['paramName']

所以你區分它會在config.main的結束'PARAMS' 指數會像..

'params'=>array(
    'my_extension'=>array(
     'class'=>'ext.my_extension.my_extension', 
     'custom_config'=>array(
      'first_option'=>array(
       'active'=>true, 
       'custom_username'=>'username', 
       'custom_password'=>'password', 
      ), 
     ), 
    ), 
    //...remaining params 
), 

和使用將

Yii::app()->params['my_extension']['custom_config']['first_option']['custom_username']; 

編輯:

有些情況下,您需要配置yr擴展名,或者像Facebook或郵戳分開的一些東西,可能是因爲在單獨的環境中具有不同的值,並且希望將該文件放在.gitignore中,或者可能因爲您想要發佈yr擴展到開源,並希望人們給自己的配置明確的方式。

因此,在這些情況下,解決方案是在年度分機或任何地方建立一個文件,包含配置值,將該文件包含在index.php中,並在年份config/main, 中放置該內容..

在您的案例:

//in index.php 
require_once(dirname(__FILE__).'/protected/ext/yr_ext/ext_config.php'); 

//in ext/yr_ext/ext_config.php 
<?php 
class ExtConfiguration { 
public static function fetchConfigArray() { 
     return array(
     'class'=>'ext.my_extension.my_extension', 
       'custom_config'=>array(
        'first_option'=>array(
         'active'=>true, 
         'custom_username'=>'username', 
         'custom_password'=>'password', 
        ), 
       ), 
      ); 
    } 
} 
?> 

//in config/main.php 
//on top before array start 
$ext_config = ExtConfiguration::fetchConfigArray(); 

//in params 
'params'=>array(
    'my_extension'=>$ext_config, 
), 
//...remaining params 
+0

這是它, 謝謝!那麼,是否將Yii的所有自定義配置(模塊/擴展)包含在params中(在main.php中)?或者,您是否將每個擴展/模塊的配置存儲在模塊/擴展中? – ews2001 2012-07-11 18:28:05

+0

我編輯了答案.. – 2012-07-11 20:05:16

1

通過您分享我們的配置片段,你提到你必須定義主要類公共財產$custom_config

,只需在您的擴展使用像像$this->custom_config

+0

我說'公共$ custom_config;'我的擴展類,但價值是空的,我怎麼能得到數組custom_config從main.php(與custom_username,custom_password等) – ews2001 2012-07-11 18:16:30

相關問題