selective/config

配置组件,严格类型

1.2.0 2023-09-09 11:15 UTC

This package is auto-updated.

Last update: 2024-09-09 15:11:11 UTC


README

PHP 的严格类型配置组件。受 Apache Commons Configuration 启发。

Latest Version on Packagist Software License Build Status Coverage Status Quality Score Total Downloads

要求

  • PHP 8.1+

安装

composer require selective/config

操作理论

您可以使用 Configuration 通过传递多维数组中一个路径来从数组中读取单个值,使用 get{type}()find{type}() 方法之一。

每个 get*() / find*() 方法接受一个默认值作为第二个参数。如果路径在原始数组中找不到,则使用默认值作为返回值。

get*() 方法仅返回声明返回类型。如果没有提供默认值且元素找不到,则抛出异常。

find*() 方法仅返回声明返回类型或 null。如果元素找不到,则不会抛出异常。

用法

<?php

use Selective\Config\Configuration;

$config = new Configuration([
    'key1' => [
        'key2' => [
            'key3' => 'value1',
        ]
    ]
]);

// Output: value1
echo $config->getString('key1.key2.key3');

Slim 4 集成

添加此依赖注入容器定义

use Selective\Config\Configuration;

// ...

return [
    // Application settings
    Configuration::class => function () {
        return new Configuration(require __DIR__ . '/settings.php');
    },
    
    // ...
];

示例

配置数据库连接

设置

// Database settings
$settings['db'] = [
    'driver' => 'mysql',
    'host' => 'localhost',
    'username' => 'root',
    'database' => 'test',
    'password' => '',
    'charset' => 'utf8mb4',
    'collation' => 'utf8mb4_unicode_ci',
    'flags' => [
        PDO::ATTR_PERSISTENT => false,
        PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
    ],
];

容器定义

use Selective\Config\Configuration;
use PDO;

return [
    // ...

    PDO::class => static function (ContainerInterface $container) {
        $config = $container->get(Configuration::class);

        $host = $config->getString('db.host');
        $dbname =  $config->getString('db.database');
        $username = $config->getString('db.username');
        $password = $config->getString('db.password');
        $charset = $config->getString('db.charset');
        $flags = $config->getArray('db.flags');
        $dsn = "mysql:host=$host;dbname=$dbname;charset=$charset";

        return new PDO($dsn, $username, $password, $flags);
    },

    // ...

];

注入配置

设置

$settings['module'] = [
    'key1' => 'my-value',
];

消费者类

<?php

namespace App\Domain\User\Service;

use Selective\Config\Configuration;

final class Foo
{
    private $config;

    public function __construct(Configuration $config)
    {
        $this->config = $config;
    }

    public function bar()
    {
        $myKey1 = $this->config->getString('module.key1');
        
        // ...
    }
}

类似库

许可

MIT 许可证 (MIT)。有关更多信息,请参阅 许可文件