corex / config
支持适配器的配置组件(数组、数组文件、环境变量、服务器等...)
Requires
- php: ^8.1
Requires (Dev)
- phpstan/phpstan: ^1.10
- phpunit/phpunit: ^10.3
README
重大更改 - 此软件包已从头开始重写,以使其更严格且更灵活。优先支持适配器而非加载器。重大更改可以在CHANGELOG中找到。
获取配置值是通过创建Config::class的实例并使用方法来获取值来完成的。支持多个适配器。
示例
$adapter = new ArrayAdapter([ 'actor' => [ 'name' => 'James Bond', ], ]); $config = new Config([$adapter]); $actorName = $config->getString('actor.name');
为了方便在部分键和其余键分开的情况下使用,添加了section()
方法,例如section = "actor"和key = "name"。
使用section()方法的示例
$adapter = new ArrayAdapter([ 'actor' => [ 'name' => 'James Bond', ], ]); $config = new Config([$adapter]); $actorName = $config->section('actor')->getString('name');
添加了getConfigClassObject()
方法,用于获取数组并将其传递给配置类的构造函数。
使用getConfigClassObject()方法的示例
class MyConfigClass implements ConfigClassInterface { public function __construct(array $data) { } public static function getSection(): string { return 'actor'; } } $adapter = new ArrayAdapter([ 'actor' => [ 'name' => 'James Bond', ], ]); $config = new Config([$adapter]); /** @var MyConfigClass $actorConfig */ $myConfigClass = $config->getConfigClassObject(MyConfigClass::class);
ConfigFactory
存在ConfigFactory,以便更容易创建Config::class的实例。
示例
$config = (new ConfigFactory()) ->createWithServerAndEnvAndProjectConfigArrayFileAdapter();
上面的示例公开了3个适配器:ServerAdapter、EnvAdapter和ProjectConfigArrayFileAdapter。
根据上面的示例,获取值的处理过程如下。
- 检查ServerAdapter以查找键。如果找到,则返回值。
- 检查EnvAdapter以查找键。如果找到,则返回值。
- 检查ProjectConfigArrayFileAdapter以查找键。如果找到,则返回值。
基于获取值的不同方法,将返回null或抛出异常。
存在更多方法,但在它们不适用的情况下,您可以以自己的顺序实例化Config::class。
键
每个键都必须指定为点表示法,例如"actor.name"。
"_"和"-"不会被视为分隔符。
当使用ServerAdapter和EnvAdapter时,键将被转换为大写字母,例如ACTOR_NAME。这使得在例如云环境中覆盖值变得容易。
将键对象传递给适配器,并存在多种方法来获取不同格式的键。使用custom()
构建自己的。
配置
配置类存在多种方法来获取正确格式的值。存在用于获取特定类型(带或不带null)的方法,例如"getString()"或"getStringOrNull()"。支持以下类型:字符串、整数、布尔值、双精度浮点数、数组、列表。
对于所有类型方法,将从适配器检查值是否为正确类型,如果不是,则抛出异常。
"translated-bool"将以下值转换为布尔值。
真值的值:['true', true, 'yes', 'on', 1, '1']。
假值的值:['false', false, 'no', 'off', 0, '0']。
"list"表示一个数组,其中键是数字键0..n。
适配器
可以通过扩展AbstractAdapter或实现AdapterInterface来编写自己的适配器。
以下标准适配器将数组作为配置值的基。
ArrayAdapter
提供简单数组。
$adapter = new ArrayAdapter([ 'actor' => [ 'name' => 'James Bond', ], ]);
EnvAdapter
提供$_ENV全局数组。
$adapter = new EnvAdapter();
ServerAdapter
提供$_SERVER全局数组。
$adapter = new ServerAdapter();
ArrayFileAdapter
在项目根目录之外提供PHP数组文件。
$adapter = new ArrayFileAdapter(new Filesystem(), '/config-dir-outside-project-root');
ProjectPathArrayFileAdapter - 提供
从相对目录提供项目根目录中的PHP数组文件。
$adapter = new ProjectPathArrayFileAdapter(new Filesystem(), 'my-config-dir');
ProjectConfigArrayFileAdapter
从名为"config"的相对目录提供项目根目录中的PHP数组文件。
$adapter = new ProjectConfigArrayFileAdapter(new Filesystem());
数组文件。
数组文件的示例。
文件名"bond.php"。
<?php declare(strict_types=1); return [ 'actor1' => [ 'firstname' => 'Roger', 'lastname' => 'Moore' ], 'actor3' => [ 'firstname' => 'Daniel', 'lastname' => 'Craig' ] ];
这些类型的文件可以通过ArrayFileAdapter、ProjectPathArrayFileAdapter和ProjectConfigArrayFileAdapter加载。
配置键的示例:"bond.actor1.firstname",它将返回"Roger"。
键名"bond"的第一部分表示部分,在这些适配器上表示文件名。