corex/config

支持适配器的配置组件(数组、数组文件、环境变量、服务器等...)

4.2.0 2024-01-02 08:43 UTC

This package is auto-updated.

Last update: 2024-08-31 00:36:12 UTC


README

license build Code Coverage PHPStan Level

重大更改 - 此软件包已从头开始重写,以使其更严格且更灵活。优先支持适配器而非加载器。重大更改可以在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"的第一部分表示部分,在这些适配器上表示文件名。