inspirenmy / yii2-config
Yii2 扩展,允许从数据库表或默认配置中获取应用程序参数、文本或电子邮件模板,并通过管理面板动态导入和管理。
Requires
- php: >5.5.0
- inspirenmy/yii2-helpers: *
- inspirenmy/yii2-models: *
- inspirenmy/yii2-traits: *
- yiisoft/yii2: ~2.0.0
README
#Yii2 扩展 - 配置
##描述
Yii2 扩展,允许从数据库表或默认配置中获取应用程序参数、文本或电子邮件模板,并通过管理面板动态导入和管理。
此扩展包含以下组件
- 配置组件
- 模板引擎组件
- 电子邮件模板引擎和composer引擎组件
##内容
##安装
- 从composer获取
composer require inspirenmy/yii2-config
或在composer.json的"require"部分添加依赖
"inspirenmy/yii2-config": "*"
- 手动或使用迁移机制(将文件
demo/tbl_config.php
、demo/tbl_template.php
和demo/tbl_email_template.php
复制到migrations
文件夹)创建配置存储和模板存储的数据库表。
##配置组件
允许从数据库表获取参数,如果不存在,则从以下源获取
- 直接从方法调用参数
- 从应用程序参数文件
- 从自定义单独的配置文件
允许在初始化任何组件时设置参数
- 直接在app配置文件中目标组件的配置部分
- 在app配置文件中配置组件的配置部分使用
bootstrap
部分 - 在初始化任何组件的配置部分调用
\Yii::createObject
###配置
####简单设置
return [ //... 'components' => [ //... 'config' => 'inspirenmy\config\Configurator', ], ];
####灵活设置 Configurator 类有几个参数可以修改
- 类 (
class
) - 配置存储数据库表名称 (
tableName
) - 自定义默认配置参数的文件名 (
defaultConfigFile
)
return [ //... 'components' => [ //... 'config' => [ 'class' => 'inspirenmy\config\Configurator', 'tableName' => 'tbl_config', 'defaultConfigFile' => '@common/data/default.php', ], ], ];
####配置事件处理器 组件类有几个参数可以修改
- 类 (
class
) - 缺失存储的文件名 (
fileStorage
) - 缺失存储的目录名 (
folderStorage
)
重要
指定为folderStorage
的目录必须存在。在这里,如果存在某些配置参数,将创建fileStorage
文件。建议预先创建文件夹,并在其中包含.gitkeep
文件。
return [ //... 'components' => [ //... 'config' => [ //... 'handler' => [ 'class' => 'testHandler', 'config'=> [ 'fileStorage' => 'missing_configs', 'folderStorage' => '@common/data/', ], ], ], ], ];
###使用方法
此扩展的目标是通过Web应用程序管理员修改系统配置和模板,因此所有用法都将实现修改功能。
尝试使用复杂名称作为参数键,格式为点状风格:moduleName.paramName
或moduleName.submoduleName.paramName
。不要使用appconfig
作为moduleName
。这是保留的。
####前端
#####获取配置应用程序的参数
从数据库或\Yii::$app->params
数组获取应用程序配置参数。
获取器按顺序执行以下步骤。如果找到值,则中断传递。这里
- 内部类变量(如果此参数已被请求使用)
- 缓存(使用默认的
\Yii::$app->cache
) - 数据库表(使用
tableName
表) - 自定义参数
defaultValue
(如果设置了第二个参数defaultValue
) - 自定义默认配置参数数组(
defaultConfigFile
) \Yii::$app->params
数组 在最后,如果找不到值,则抛出异常。
\Yii::$app->config->get('paramName');
或
\Yii::$app->config->get('paramName', 'defaultValue');
如果参数的值在数据库表(或缓存视图)中不存在,则处理程序(fileStorage
)将将其添加到缺失的配置文件中。之后,网络应用程序管理员可以将缺失的值(以及所有默认值)导入数据库表并修改它们。
如果某些配置参数需要更安全的设置级别,您可以使用本地参数文件来避免在公共仓库中提交它们。
#####通过键的掩码获取配置参数的数组
从数据库中通过键的掩码获取配置参数的数组。
获取器按顺序执行以下步骤。如果找到值,则中断传递。这里
- 内部类变量(如果此参数已被请求使用)
- 缓存(使用默认的
\Yii::$app->cache
) - 数据库表(使用
tableName
表)最后,如果找不到键掩码的值,则结果将显示为空数组。
\Yii::$app->config->getLike('beginParamName');
例如,
\Yii::$app->config->getLike('someModule');
将返回与someModule
相关的所有参数
someModule.param1
someModule.param2
someModule.submodule.param1
- ...
#####获取应用程序参数
从数据库或\Yii::$app
中获取应用程序参数。
\Yii::$app->config->app('paramName');
例如,
\Yii::$app->config->app('name');
将返回存储在数据库中的您的应用程序名称,如果不存在,则直接从应用程序配置(\Yii::$app->name
)中获取。
#####使用配置器配置其他组件
######直接修改配置文件
配置器可以直接用于在配置文件中预配置其他组件。这些组件应包含并使用ConfigurableTrait
(示例见demo
)。
例如,配置sms组件使用sms.senderNumber
参数
// ... 'sms' => [ 'class' => 'inspirenmy\sms\Sender', 'senderNumber' => [ 'component' => 'config', 'sms.senderNumber' => 'AppName', ], ],
######组件的引导
配置器可以预配置实现引导接口的其他组件。
将配置组件添加到应用程序引导部分
return [ // ... 'bootstrap' => [..., 'config', ...], // ... ],
然后填写引导组件部分
return [ //... 'components' => [ //... 'config' => [ //... 'bootstrap' => [ 'cloudStorage' => [ 'key' => 'cloud_amazons3_key', 'secret' => 'cloud_amazons3_secret', 'bucket' => 'cloud_amazons3_bucket', 'cloudStorageBaseUrl' => 'cloud_amazons3_baseurl', ], 'upload' => [ 'externalStorageBaseUrl' => 'cloud_amazons3_baseurl', ], ], ], ], ];
并将cloud_amazons3_bucket
、cloud_amazons3_baseurl
、cloud_amazons3_baseurl
添加到参数数组中(或设置默认参数文件),或者将cloud_amazons3_key
、cloud_amazons3_secret
添加到本地参数中,以保护它们。
####后端
在后端部分应使用ConfiguratorAdmin
类或继承。它使用ConfiguratorAdminTrait
,允许从fileStorage
文件导入缺失的配置或从(如果存在)defaultConfigFile
文件导入默认配置。
网络应用程序管理员可以
- 获取配置列表,使用您的应用程序管理员网格模式进行筛选和排序(使用标准的
IndexAction
等) - 修改存在的配置(使用标准的
UpdateAction
等) - 导入缺失的配置(使用
admin/ImportMissingAction
) - 如果存在
defaultConfigFile
文件,则导入默认配置(使用admin/ImportDefaultAction
)
##模板引擎组件
允许从数据库表获取模板,如果不存在,则从模板源文件获取。在返回之前,它将替换模板变量的所有匹配项。
配置过程与配置组件非常相似,只是类的名称不同——使用inspirenmy\template\TemplateEngine
。
使用过程与获取配置应用程序的参数非常相似。获取器依次执行以下步骤。如果找到值,则中断传递。这里的流程
- 内部类变量(如果此参数已被请求使用)
- 数据库表(使用
tableName
表) - 在
templateFolder
文件夹中具有templateExt
扩展名的模板源文件最后,如果找不到值,则抛出异常。
\Yii::$app->template->get('templateName');
或
\Yii::$app->template->get('templateName', ['param1' => 'value1', 'param2' => 'value2']);
如果模板在数据库表中不存在,则处理程序(fileStorage
)将将其添加到缺失的模板文件中。之后,网络应用程序管理员可以将缺失的模板导入数据库表并修改它们。
其他过程与配置组件的过程类似。
##电子邮件模板引擎和作曲家引擎组件
允许从数据库获取电子邮件参数,如主题、模板名称,然后从已准备的文件存储(其中管理员可以在后端修改)或如果不存在,则从邮件模板源文件中使用模板。
配置过程与配置组件非常相似,只是类的名称不同——使用inspirenmy\template\Mailer
。
使用过程与获取配置应用程序的参数非常相似。获取器依次执行以下步骤。如果找到值,则中断传递。这里的流程
- 内部类变量(如果此参数已被请求使用)
- 数据库表(使用
tableName
表) - 模板源文件位于
mailerComponentViewPath
文件夹中。最后,如果找不到模板,则抛出异常。
\Yii::$app->setTemplate('email_key')->setTo('email')->send();
或更详细
\Yii::$app->email ->setTemplate('test-html.php') ->setTo('inspirenmy@gmail.com') ->setFrom('admin@localhost') ->setSubject('Your account on ' . $appName) ->setParams(['user' => $this, 'appName' => $appName]) ->send();
如果模板在数据库表中不存在,则处理程序(fileStorage
)将将其添加到缺失的模板文件中。之后,网络应用程序管理员可以将缺失的模板导入数据库表并修改它们。
如果配置了参数 redirectEmail
,则所有邮件都将重定向到该邮箱(将忽略字段 to
)。如果参数 isTransferEnabled
设置为 false,则邮件发送器的选项 useFileTransport
将被设置为 true,而不是实际转移邮件。
其他过程与配置组件的过程类似。