futuretek/yii2-options

本扩展提供了数据库存储的应用配置支持。

2.0.5 2019-09-07 18:49 UTC

This package is auto-updated.

Last update: 2024-09-08 05:50:20 UTC


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,此属性包含以下形式的数据
    1. 包含键 id 和 name 的数组数组(见以下示例)或
    2. 返回相同数组的匿名函数

建议:如果您需要在同一选项组中的选项之间创建分隔符,只需将字符串作为 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