futuretek / yii2-options
本扩展提供了数据库存储的应用配置支持。
Requires
- php: >=5.5.0
- futuretek/yii2-migrations: ^1.0.0
- yiisoft/yii2: ^2.0.0
- yiisoft/yii2-bootstrap: ^2.0.0
Suggests
- yiidoc/yii2-redactor: ^2.0.0
README
本扩展提供了数据库存储的应用配置支持。
警告:2.x 版本引入了破坏性变更。从 1.x 版本升级是可能的,但需要额外操作。
迁移到 2.x 版本的步骤
- 为每个使用的选项项创建选项配置
- 在 Yii2 配置中包含组件
- 重写命令为新语法(或使用兼容类
futuretek\options\compat\Option
)
安装
安装此扩展的首选方式是通过 composer。
运行以下命令:
php composer.phar require --prefer-dist futuretek/yii2-options "*"
或将以下内容添加到您的 composer.json
文件的要求部分:
"futuretek/yii2-options": "*"
配置
要开始使用此扩展,您必须在 Yii 配置中加载它
return [ 'components' => [ 'options' => [ 'class' => 'futuretek\options\Option', 'configFile' => __DIR__ . '/options.php', 'enableCaching' => true, ], ], ];
组件本身可以通过以下属性进行配置
注意:选项配置在初始化时按需加载(与将其包含在应用程序配置中相反)。这是因为那时翻译引擎不可用。
选项配置/定义数组包含选项组的列表。
选项组
每个选项组由以下属性组成。标记为 (*) 的属性是必需的。
- title (*) - 组标题
- items (*) - 包含选项项数组(见下文)
- visible - 如果组可见
选项项
选项组的 items
属性是包含选项项的数组。
选项项由以下属性组成。标记为 (*) 的属性是必需的。
- name (*) - 选项名称(唯一)
- type (*) - 选项类型。请参阅 Option::TYPE_* 常量。
- title (*) - 选项标题
- hint - 选项描述
- visible - 如果选项可见
- default - 指定选项默认值。获取定义但未设置的选项将返回此值。如果未设置,则返回
null
。 - context - 如果选项是上下文选项。如果是 true,则选项将不会使用提供的操作进行渲染。
- data - 对于选项类型 = TYPE_OPTION,此属性包含以下形式的数据
- 包含键 id 和 name 的数组数组(见以下示例)或
- 返回相同数组的匿名函数
建议:如果您需要在同一选项组中的选项之间创建分隔符,只需将字符串作为 items
数组项之一即可。
配置示例
return [
[
'title' => Yii::t('app', 'Group one'),
'visible' => true,
'items' => [
['name' => 'PHONE', 'type' => Option::TYPE_PHONE, 'title' => Yii::t('app', 'Phone number')],
['name' => 'EMAIL', 'type' => Option::TYPE_EMAIL, 'title' => Yii::t('app', 'Email address')],
Yii::t('app', 'Apperance'), //Divider
[
'name' => 'COLOR',
'type' => Option::TYPE_OPTION,
'title' => Yii::t('app', 'Color scheme'),
'data' => [
['id' => 'ff0000', 'name' => 'Red'],
['id' => '00ff00', 'name' => 'Green'],
['id' => '0000ff', 'name' => 'Blue'],
],
],
],
],
[
'title' => Yii::t('app', 'Another group'),
'visible' => YII_ENV_DEV, //Visible only in dev env
'items' => [
[
'name' => 'LOGIN_TYPE',
'type' => Option::TYPE_OPTION,
'title' => Yii::t('app', 'Login Type'),
'hint' => Yii::t('app', 'Please select desired login type'),
'data' => function () {
return \app\classes\Tools::findAvailableLoginProviders();
},
],
],
],
];
用法
此扩展创建用于存储配置的 options
组件。
获取选项
$value = \Yii::$app->options->get('OPTION_NAME');
设置选项
\Yii::$app->options->set('OPTION_NAME', $value);
上下文选项
当您需要处理多个实体的不同配置(例如用户配置)时,上下文非常有用。
在此用例中,可以使用上下文。只需指定实体标识符为 context
,实体记录 ID 为 context_id
即可。
获取和设置选项是通过 get() 和 set() 方法的其他参数完成的。
$userValue = \Yii::$app->options->get('OPTION_NAME', self::class, $this->getPrimaryKey()); \Yii::$app->options->set('OPTION_NAME', $userValue, self::class, $this->getPrimaryKey());
渲染设置页面
如果您想渲染设置页面,提供了一个 futuretek\options\IndesAction
。您只需将其添加到控制器的 actions()
方法即可。
还有一个 futuretek\options\OptionsHelper
,它提供了根据选项类型渲染选项编辑字段的方法。
请参阅相关文件以获取更多详细信息。
开发
翻译
翻译通过标准的Yii2翻译进行管理。为了自动注册扩展翻译,我们建议使用我们的另一个扩展 futuretek/yii2-composer。
要生成翻译消息,请在扩展根目录下运行以下命令。
yii message/extract messages/config.php
资产
资产由 Compass 管理
- 在开发过程中,请在扩展根目录下运行
compass watch
- 要编译资产以进行最终分发,请在扩展根目录下运行
compass compile -e production --force