ews*_*001 1 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',
),
),
),
Run Code Online (Sandbox Code Playgroud)
如何访问"有效","custom_username"和"custom_password"?
在我扩展CFormModel的扩展中,我试过:
Yii::app()->my_extension->custom_config['first_option']['custom_username'];
Run Code Online (Sandbox Code Playgroud)
但我得到错误:
Property "my_extension.custom_config" is not defined.
Run Code Online (Sandbox Code Playgroud)
这是错误的原因是因为您正在尝试访问Yii :: app()的属性,该属性未声明,在数组中定义.
入口脚本(index.php)通常会像这样创建Yii对象.
require_once($yii);
Yii::createWebApplication($config)->run();
Run Code Online (Sandbox Code Playgroud)
$ config变量是你的main.config文件数组,所以即使你在数组中添加一个索引,它在Yii :: app()的属性中也不匹配,它也不会创建那个..
为了设置自定义配置,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
),
Run Code Online (Sandbox Code Playgroud)
用法将是
Yii::app()->params['my_extension']['custom_config']['first_option']['custom_username'];
Run Code Online (Sandbox Code Playgroud)
编辑:
有些情况下,你需要配置yr扩展,或者像facebook或邮戳分开的东西,可能是因为在不同的环境中有单独的值,并且想要放入该文件.gitignore,或者可能是因为你想释放你的扩展名来打开-source,并希望人们明确拥有自己的配置..
因此,在这些情况下,解决方案是在ext或者任何地方创建一个文件,在包含配置值的数组中创建一个数组,包含该文件index.php,并在yr 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
Run Code Online (Sandbox Code Playgroud)