灵活 / 全集
配置和设置管理器,可以从磁盘或AWS Secrets Manager自动加载。
Requires
- php: ^8.0
- psr/container: ^1.0|^2.0
Requires (Dev)
- aws/aws-sdk-php: ^3.110
- php-coveralls/php-coveralls: ^2.1
- phpunit/phpunit: ^9.0
- symfony/var-dumper: ^4.3
- vimeo/psalm: ^4.0
Suggests
- aws/aws-sdk-php: For using AwsLoader to load configurations from AWS Secrets Manager.
README
A simple PSR-11 compliant configuration manager with lazy loading from files, AWS Secrets Manager, or any other source.
安装
composer require nimbly/config
使用
使用LoaderInterface实例的数组实例化Config管理器。您可以指定任意多的加载器 - 或者一个都不指定。
$config = new Config([ new FileLoader(__DIR__ . "/config") ]);
从配置中获取数据。
$config->get("database.hostname");
加载器
加载器负责接受一个key
,加载,然后返回数据。
提供了两个内置加载器:FileLoader
和AwsLoader
,但提供了一个LoaderInterface
用于实现任何其他加载器。
FileLoader
FileLoader
将从本地文件系统尝试加载配置数据。
使用您的配置文件路径实例化FileLoader
。
new FileLoader("/path/to/config/files");
配置文件应返回包含您的配置数据的关联数组。
<?php // file: config/database.php return [ "host" => "localhost", "port" => 1234, "user" => "dbuser", "password" => "dbpassword", ];
AwsLoader
AwsLoader
将从AWS Secrets Manager尝试加载配置数据。
注意
- 如果您的AWS Secrets Manager密钥包含点("。"),则加载器将无法正确解析密钥名称。建议您的AWS密钥采用AWS最佳实践的
prod/db/default
形式。 - 目前此加载器不支持
VersionId
和StageVersion
选项。 - 目前不支持
SecretBinary
值。加载器将只查找SecretString
属性中的值。
动态添加加载器
您可以动态地添加加载器。
$config->addLoader( new FileLoader(__DIR__ . "/config") );
访问值
可以使用点符号语法访问配置键,最左边的键是加载器将用于解析和加载配置数据的键。
$config->get("database.host");
上述代码将从传递给Config管理器的配置路径加载文件database.php
的内容。
您的配置文件可能包含嵌套的关联数组,可以使用相同的点符号语法访问。
$config->get("database.connections.default.host");
PSR-11注意
默认情况下,如果项目存储中找不到项目,Caboodle将返回一个null
。
然而,PSR-11指出,当找不到项目时,应抛出一个NotFoundExceptionInterface
的实例。
如果您希望当找不到项目时,Caboodle抛出异常,您可以调用setThrowIfNotFound()
方法。
$config->setThrowIfNotFound(true);
键提示
默认情况下,根键名假设为第一个点(".")之前的一切。但是,如果根键名包含点,您可以使用单个井号代替点来提示键名。
例如
$config->get("prod.database#connections.default.hostname");
手动添加值
您还可以手动将新的键/值对添加到配置管理器中。
$config->add("queue", [ "name" => "jobs", "host" => "localhost", "port" => 1234 ]);
或者,您可以分配配置数据的全部内容。
$config->setItems([ "key1" => "value1", "key2" => [ "key3" => "value3" ] ]);