nimble / caboodle
配置和设置管理器,可以从磁盘或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") );
访问值
可以使用点表示法访问配置键,最左边的是加载器将用于解析和加载配置数据的key
。
$config->get("database.host");
上面的示例将加载从传递到Config管理器的配置路径中加载的database.php
文件的内容。
您的配置文件可能包含嵌套的关联数组,可以使用相同的点表示法访问。
$config->get("database.connections.default.host");
PSR-11说明
默认情况下,如果项存储中未找到项,Caboodle将返回一个null
。
但是,PSR-11规定,当项未找到时,应抛出一个NotFoundExceptionInterface
实例。
如果您希望在未找到项时抛出异常,可以调用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" ] ]);