hurtcode / configure-yaml
基于Yaml的配置库
Requires
- php: 8.*
- hurtcode/configure: 1.*
- psr/container: 2.*|1.*
- symfony/yaml: 5.*
- yiisoft/arrays: ^1.0
- yiisoft/json: 1.*
This package is auto-updated.
Last update: 2024-09-29 05:50:02 UTC
README
此库是 config 库的 YAML 实现。它使用 yaml 文件格式来处理应用程序配置。
库功能列表
- 实现大量特殊标记,帮助创建复杂的多文件配置
- 添加自定义逻辑编译文件的灵活性
用法示例
创建配置文件。所有文件都位于一个配置目录中。
# main.yaml !merge - !sub common/base - !env base # commone/base.yaml id: 'accounting' basePath: !var key: baseDir value: !call name: dirname args: !interpret $_SERVER['DOCUMENT_ROOT'] components: db: class: App/Connection/DbClass log: class: App/Logger security: class: App/Common/Security # dev/base.yaml components: db: connection: port: '5543' host: 'localhost' log: targets: [ 'DEBUG', 'TEST', 'INFO' ] security: keyDir: !concatenate - !var baseDir - /kyes/public
然后创建一个包含 configurator 类、config 资源 和 Yaml 编译器 的配置文件。
$config = new \Hurtcode\Config\Yaml\Config('config/diractory/path', 'entpryPointFile'); $compiler = new \Hurtcode\Config\Yaml\Compiler( new \Hurtcode\Config\Yaml\Tag\AbstractTagProcessorFactory( new \Hurtcode\Config\Yaml\Tag\TagProcessorMap() ) ); $applicationConfigs = (new \Hurtcode\Config\Configurator($config, $compiler))->run();
结果,我们得到一个包含配置的 PHP 数组
[
'id' => 'accounting',
'basePath' => '/var/httpd/sites/example',
'components' => [
'db' => [
'class' => 'App/Connection/DbClass',
'connection' => [
'port' => '5543',
'host' => 'localhost'
],
],
'log' => [
'class' => 'App/Logger',
'targets' => [
'DEBUG',
'TEST',
'INFO'
]
],
'security' => [
'class' => 'App/Common/Security',
'keyDir' => '/var/httpd/sites/example/kyes/public'
]
]
];
库工作描述
此库基于 Symfony 的 YAML 和 Yaml 标签。所有标签都执行特定逻辑,如创建配置变量或字符串连接。标签功能依赖于两个接口 TagProcessorFactoryInterface 和 TagProcessorsMapInterface,分别用于创建特定标签的处理器类和将标签与其处理器类关联(这对于基于 AbstractTagProcessorFactory 的基础 TagProcessorFactoryInterface 是必需的)。因此,如果需要更多特定标签或另一种处理逻辑,请实现自己的接口
默认情况下,Config YAML 处理以下标签
- call
- env
- concatenate
- merge
- interpret
- sub
- get
- var
所有这些标签都包含在 tag 列表类 中
标签和处理器
可调用处理器
!call
帮助在配置中调用 PHP 函数。函数名来自标签值的 name 键。您还可以通过 args 键传递参数
标签规则
- 值必须包含 'name' 键。
- 'name' 必须是字符串
- 如果您以数组的形式传递参数,则它必须是有索引的(不带字符串键)
示例
!call name: substr args: - string - 0 - 3
子配置处理器
!sub
此处理器编译新的配置并将其返回到标签被使用的地方。配置文件路径是相对于配置文件夹路径的相对路径
标签规则
- 值必须为字符串
示例
!sub path/in/depth/file
环境处理器
!env
此处理器从环境目录获取配置并像子配置处理器一样编译它。环境目录可以从 di 容器中传递。默认环境为 'dev'。
标签规则
- 值必须为字符串
示例
!env config
合并标签处理器
!merge
合并标签值到一个数组。使用 Yiisoft/ArrayHelper。
标签规则
- 标签值必须是数组或列表
- 标签必须至少包含 2 个元素
- 每个元素必须是数组或列表
示例
!merge - [ some value, another value ] - { key: value, anotherKey: another value }
连接处理器
!concatenate
连接处理器将字符串列表连接成一个字符串
标签规则
- 值必须为字符串数组
示例
!concatenate - some - string - is
解释处理器
!interpret
此处理器将传入的表达式解释为 PHP 代码。请注意,传入的字符串被模板 return {value}; 包装并传递给 eval 函数
标签规则
- 值必须为字符串
示例
!interpret '$_SERVER['REQUEST_TIME']'
变量处理器
!var
此处理器提供了在 YAML 中创建全局配置变量的能力。它有两种工作模式:1) 设置模式;2) 获取模式。
标签规则
- 值必须包含
key和value(如果您想设置) Key必须是字符串(仅设置模式)- 值必须是字符串。
- 值必须在 'container' 中。这意味着在调用它之前必须设置变量!
示例
# set var - !var { set: variable, value: some value' } # get var - !var variable
获取处理器
!get
获取处理器有助于从另一个配置或列表中获取某些特定值。要使用它,您必须指定 key(您想要的内容)和 from(从哪里获取)。
标签规则
- 值必须是一个包含
key和from键的列表。 key必须是字符串(用于关联数组)或整数(用于索引数组)from必须是数组或列表
示例
!get { key:element, from: { element: value } }