hurtcode/configure-yaml

基于Yaml的配置库

1.0.1 2021-12-02 10:14 UTC

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) 获取模式。

标签规则

  • 值必须包含 keyvalue(如果您想设置)
  • Key 必须是字符串(仅设置模式)
  • 值必须是字符串。
  • 值必须在 'container' 中。这意味着在调用它之前必须设置变量!

示例

# set var
- !var { set: variable, value: some value' }
# get var
- !var variable

获取处理器

!get

获取处理器有助于从另一个配置或列表中获取某些特定值。要使用它,您必须指定 key(您想要的内容)和 from(从哪里获取)。

标签规则

  • 值必须是一个包含 keyfrom 键的列表。
  • key 必须是字符串(用于关联数组)或整数(用于索引数组)
  • from 必须是数组或列表

示例

!get { key:element, from: { element: value } }