macfja / chain-config
一个配置加载器,顺序很重要。
Requires
- php: >=5.3
Requires (Dev)
- nette/neon: ^2.3
- phpunit/phpunit: ^4.8
- squizlabs/php_codesniffer: ^2.5
- symfony/yaml: ^2.8
Suggests
- nette/neon: For reading Neon configuration format
- symfony/yaml: For reading Yaml configuration format
This package is auto-updated.
Last update: 2024-09-17 01:16:41 UTC
README
一个配置加载器,顺序很重要。
功能
- 多个配置路径
- 多个加载器
- Ini (
.ini
,.properties
) - Json (
.json
) - Neon (
.neon
) - Php (
.php
) - Xml (
.xml
) - Yaml (
.yml
,.yaml
)
- Ini (
- 处理
.dist
文件 - 路径顺序很重要
- 读取器顺序很重要
- 动态键
- 动态值
处理 .dist
文件
当搜索要加载的配置文件时,库检查是否存在 .dist
文件。如果存在,并且没有不带 .dist
部分的文件,则使用该文件。
所以,在这个例子中
├── test1.ini.dist
├── test2.ini
└── test2.ini.dist
test1.ini.dist
将被加载,
但不会加载 test2.ini.dist
,因为存在文件 test2.ini
。(并且将加载 test2.ini
)
顺序很重要
配置数据按照你定义的顺序加载。加载器也是按照你定义的顺序使用的。
示例
├── 01-my-secondary-path/
│ └── a.php
└── 02-my-main-path/
├── a.ini
├── b.ini
└── b.xml
如果你将 02-my-main-path
定义为第一个路径,将 01-my-secondary-path
定义为第二个路径。如果你请求 a.*
配置,则库将首先加载 02-my-main-path/a.php
,然后加载 02-my-main-path/a.ini
。后续加载不会覆盖已加载的数据,后续加载仅添加缺失的键/值。
读取器的顺序也很重要。在前面的结构中,如果你将 Xml 读取器 定义在 Ini 加载器 之前,那么如果你请求 b.*
配置,则首先加载的文件是 02-my-main-path/b.xml
,然后是 02-my-main-path/b.ini
文件。
动态数据
库提供了两个回调功能。一个用于键,另一个用于值。在键被发送到库之前,它可以被一个或多个回调函数更改。同样,对于值,在返回之前,库会将值发送给所有已注册的回调。
这可以用来根据另一个配置或环境相关变量更改键或值。 请参见下面的示例
安装
安装库最简单的方法是使用 Composer
composer require macfja/chain-config
使用方法
创建一个 Config
对象
$config = new Config(); $config->appendPath(__DIR__ . DIRECTORY_SEPARATOR . 'config'); $config->appendReader(new IniReader());
读取配置
engine = $config->get('database.engine');
读取器格式
限制
你无法在键的第一部分使用目录分隔符(Unix/Linux上的 /
,Windows上的 \
)或路径分隔符(Unix/Linux上的 :
)。
附加类
你可以找到两个类,这些类是 ChainConfig 用来工作的
MacFJA\ChainConfig\Collection\MultiPartKeyArray
:这个类支持点键访问的读取/写入(点只是一个选项!)MacFJA\ChainConfig\Collection\OrderedGroup
:这个类支持路径分组和排序