demmonico / yii2-config
Yii2 扩展,允许从数据库表或默认配置中获取应用程序参数、文本或电子邮件模板,并从管理面板动态导入和管理它们。
Requires
- php: >5.5.0
- demmonico/yii2-helpers: *
- demmonico/yii2-models: *
- demmonico/yii2-traits: *
- yiisoft/yii2: ~2.0.0
This package is not auto-updated.
Last update: 2024-09-14 19:58:28 UTC
README
描述
Yii2 扩展,允许从数据库表或默认配置中获取应用程序参数、文本或电子邮件模板,并从管理面板动态导入和管理它们。
此扩展包含以下组件
- 配置组件
- 模板引擎组件
- 电子邮件模板引擎和 composer 引擎组件
内容
安装
- 从 composer 获取
composer require demmonico/yii2-config
或在 composer.json 的 "require" 部分添加依赖项
"demmonico/yii2-config": "*"
- 手动或使用迁移机制创建配置存储和模板存储的数据库表(将
demo/tbl_config.php
、demo/tbl_template.php
和demo/tbl_email_template.php
文件复制到migrations
文件夹)。
配置组件
允许从数据库表获取参数,如果不存在,则从以下来源获取
- 直接从方法调用参数
- 从应用程序参数文件
- 从自定义单独的配置文件
允许在初始化任何组件时设置参数
- 直接在应用程序配置文件中 目标组件 的配置部分
- 在应用程序配置文件中 配置组件 的配置部分使用 引导 部分
- 在初始化任何组件时的配置部分的
\Yii::createObject
调用中
配置
简单设置
return [ //... 'components' => [ //... 'config' => 'demmonico\config\Configurator', ], ];
灵活设置
Configurator 类有几个参数可以修改
- 类 (
class
) - 配置存储数据库表的名称 (
tableName
) - 自定义默认配置参数的文件名 (
defaultConfigFile
)
return [ //... 'components' => [ //... 'config' => [ 'class' => 'demmonico\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
)将其添加到缺失的配置文件中。之后,Web 应用程序管理员可以将缺失的值(以及所有默认值)导入数据库表并修改它们。
如果某些配置参数需要更高的安全级别设置,您可以使用本地参数文件来避免在公共仓库中提交它们。
通过键的掩码获取配置参数的数组
通过键的掩码从数据库中获取配置参数的数组。
获取器按顺序执行以下步骤。如果找到值,则中断传递。此处流程
- 内部类变量(如果此参数已被请求使用)
- 缓存(使用默认
\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.senderNumber
参数配置sms组件
// ... 'sms' => [ 'class' => 'demmonico\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
文件(如果存在)导入默认配置。
Web应用程序管理员可以
- 获取配置列表,使用您的应用程序管理员网格模式进行过滤和排序(使用标准的
IndexAction
等) - 修改现有的配置(使用标准的
UpdateAction
等) - 导入缺失的配置(使用
admin/ImportMissingAction
) - 如果存在
defaultConfigFile
文件,则导入默认配置(使用admin/ImportDefaultAction
)
模板引擎组件
允许从数据库表获取模板,如果不存在,则从模板源文件获取。在返回之前,它将替换所有模板变量的匹配项。
配置过程与Config组件非常相似,除了类名 - 使用demmonico\template\TemplateEngine
。
使用过程与获取配置应用程序的参数非常相似。获取器依次执行以下步骤。如果找到值,则中断传递。流程如下
- 内部类变量(如果此参数已被请求使用)
- 数据库表(使用
tableName
表) - 具有
templateExt
扩展名的templateFolder
文件夹中的模板源文件。最后,如果没有找到值,则抛出异常。
\Yii::$app->template->get('templateName');
或
\Yii::$app->template->get('templateName', ['param1' => 'value1', 'param2' => 'value2']);
如果数据库表中不存在模板,它将通过处理程序(fileStorage
)添加到缺失的模板文件。之后,Web应用程序管理员可以将缺失的模板导入到数据库表中并对其进行修改。
其他过程与Config组件的过程类似。
电子邮件模板引擎和 composer 引擎组件
允许从数据库获取电子邮件参数,如主题、模板的名称,然后使用预存储的模板(可以在后台由管理员修改)或如果不存在,则从邮件模板源文件中获取。
配置过程与Config组件非常相似,除了类名 - 使用demmonico\template\Mailer
。
使用过程与获取配置应用程序的参数非常相似。获取器依次执行以下步骤。如果找到值,则中断传递。流程如下
- 内部类变量(如果此参数已被请求使用)
- 数据库表(使用
tableName
表) - 模板源文件位于
mailerComponentViewPath
文件夹中。最后,如果没有找到模板,则抛出异常。
\Yii::$app->setTemplate('email_key')->setTo('email')->send();
或更详细
\Yii::$app->email ->setTemplate('test-html.php') ->setTo('demmonico@gmail.com') ->setFrom('admin@localhost') ->setSubject('Your account on ' . $appName) ->setParams(['user' => $this, 'appName' => $appName]) ->send();
如果数据库表中不存在模板,它将通过处理程序(fileStorage
)添加到缺失的模板文件。之后,Web应用程序管理员可以将缺失的模板导入到数据库表中并对其进行修改。
如果配置了参数redirectEmail
,则所有电子邮件都将重定向到此电子邮件(忽略字段to
)。如果将参数isTransferEnabled
设置为false
,则邮件发送器的选项useFileTransport
将设置为true
而不是实际传输邮件。
其他过程与Config组件的过程类似。