如何为我的Yii扩展添加自定义配置

时间:2012-07-11 16:55:54

标签: configuration yii yii-extensions

我正在尝试在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.

2 个答案:

答案 0 :(得分:8)

这是错误的原因是因为您正在尝试访问Yii :: app()的属性,该属性未声明,在数组中定义。

入口脚本(index.php)通常会像这样创建Yii对象。

require_once($yii);
Yii::createWebApplication($config)->run();
$ config变量是你的main.config文件数组,所以即使你在数组中添加一个索引,它在Yii :: app()的属性中也不匹配,它也不会创建那个.. < / p>

要设置自定义配置,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扩展到开源,并希望人们明确地拥有自己的配置..

因此,在这些情况下,解决方案是在ext或者任何地方创建一个文件,在包含配置值的数组中创建一个数组,在index.phpconfig/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

答案 1 :(得分:1)

通过您与我们分享的配置片段,您提到必须在主类中定义公共属性$custom_config

只需在$this->custom_config

等扩展程序中使用