selective / config
配置组件,严格类型
1.2.0
2023-09-09 11:15 UTC
Requires
- php: ^8.1
- cakephp/chronos: ^2 || ^3
Requires (Dev)
README
PHP 的严格类型配置组件。受 Apache Commons Configuration 启发。
要求
- 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)。有关更多信息,请参阅 许可文件。