iamsalnikov / config-builder
配置构建器
Requires
Requires (Dev)
This package is not auto-updated.
Last update: 2024-09-24 17:52:47 UTC
README
本库用于配置文件的构建。
1. 安装
composer require iamsalnikov/config-builder
2. 使用
定义基本概念
- PlaceholderProcessor 是一个组件,它会在需要构建的文件中查找模板。此外,此组件还会将模板替换为特定值。
- ValueProvider 是一个组件,它为请求的模板提供某个值。
2.1. 配置
在开始工作之前,需要配置构建器,使其知道如何提取模板,以及从何处获取这些模板的值。例如配置文件(config_builder.yaml)
# Определяем обработчики шаблонов. Их может быть несколько placeholder_processors: # Просто имя, ничего не значит Basic: # Класс обработчика. Можно определить свой (об этом будет рассказано ниже) class: iamsalnikov\ConfigBuilder\PlaceholderProcessors\BasicProcessor # Список аргументов для конструктора обработчика. В данном примере # первый аргумент - левая граница плейсхолдера # второй аргумент - правая граница плейсхолдера arguments: - "{{" - "}}" # Определим провайдеры значений для плейсхолдеров (все будут описаны ниже) # Значения получаем из провайдеров, определенных по порядку. Если в первом провайдере # значение не найдено, то попробуем его найти в следующем. И так до самого конца списка # провайдеров value_providers: # Просто имя, ничего не значит YamlProvider: # Класс провайдера. Можно определить свой (об этом будет рассказано ниже) class: iamsalnikov\ConfigBuilder\ValueProviders\Yaml # Список аргументов для конструктора провайдера. В данном случае - путь до файла со значениями arguments: - /var/www/placeholders/data.yaml Environment: class: iamsalnikov\ConfigBuilder\ValueProviders\Environment arguments: - PRF_
2.2. 运行
要运行,需要执行以下命令
vendor/bin/config_builder path/to/config.php
在这种情况下,将尝试在当前活动目录中查找配置文件(config_builder.yaml)。之后将读取文件 path/to/config.php,并将所有占位符替换为来源中的值。
如果构建器的配置不在其他位置,可以使用选项 -c 或 --config 传递配置路径
vendor/bin/config_builder -c path/to/config_builder.yaml path/to/config.php
运行结果输出到 stdout。如果需要将所有内容保存到文件,可以使用输出重定向
vendor/bin/config_builder path/to/config.example.php > path/to/config.php
3. 模板名称
每个模板通常在开头和结尾有限定的框架。例如:{{db.host}}。在本例中,模板名称为 db.host
在名称中,我们可以使用嵌套,如果需要从数组中获取值。我们使用点(.)分隔级别。也可以使用数字索引。
4. 模板处理器
每个模板处理器都必须实现接口 iamsalnikov\ConfigBuilder\Interfaces\PlaceholderProcessor。
目前只有一个模板处理器 - iamsalnikov\ConfigBuilder\PlaceholderProcessors\BasicProcessor。其构造函数接受两个参数:占位符的左边界和右边界。
5. 值提供者
每个值提供者都实现了接口 iamsalnikov\ConfigBuilder\Interfaces\ValueProvider。
目前有三个值提供者
iamsalnikov\ConfigBuilder\ValueProviders\Environment
- 从环境变量中获取值。
构造函数接受一个可选参数:环境变量的前缀。
使用嵌套的模板名称(例如,db.host)将被转换为 DB_HOST。如果设置了前缀,例如 GG_,则模板的值将在环境变量 GG_DB_HOST 中查找。
iamsalnikov\ConfigBuilder\ValueProviders\Json
- 从 json 文件中获取值。
构造函数接受一个必需参数:值文件的路径。如果路径不是绝对路径,则它将被计算为包含构建器配置的文件夹的相对路径。
使用第 3 点中的语法获取嵌套值(db.host,user.0.email)。
iamsalnikov\ConfigBuilder\ValueProviders\Yaml
- 与 Json 提供者类似,但使用 yaml 文件。
始终可以定义自己的数据提供者并使用它
可以有许多数据提供者。在这种情况下,我们将为模板查找值,直到某个提供者提供一些值,或者直到到达提供者列表的末尾。
6. 工作示例
我们有配置文件 /var/www/config_builder.yaml
placeholder_processors: Basic: class: iamsalnikov\ConfigBuilder\PlaceholderProcessors\BasicProcessor arguments: - "{{" - "}}" value_providers: YamlProvider: class: iamsalnikov\ConfigBuilder\ValueProviders\Yaml arguments: - placeholders/data.yaml # файл будет найден в /var/www/placeholders/data.yaml Environment: class: iamsalnikov\ConfigBuilder\ValueProviders\Environment arguments: - PRF_
来自文件 /var/www/placeholders/data.yaml 的数据
db: host: localhost port: 3306 dbName: hello user: user password: superpassword
环境变量 PRF_DB_SECURITY_KEY="securnost"
模板文件内容(config.php)
<?php return [ 'db' => [ 'connectionString' => 'mysql:{{db.host}}:{{db.port}}/{{db.dbName}}', 'user' => '{{db.user}}', 'password' => '{{db.password}}', 'encryptionKey' => '{{db.securityKey}}' ] ];
执行命令
vendor/bin/config_builder config.php
获得输出
<?php return [ 'db' => [ 'connectionString' => 'mysql:localhost:3306/hello', 'user' => 'user', 'password' => 'superpassword', 'encryptionKey' => 'securnost' ] ];