league / config
使用严格的模式定义配置数组,并通过点符号访问值
v1.2.0
2022-12-11 20:36 UTC
Requires
- php: ^7.4 || ^8.0
- dflydev/dot-access-data: ^3.0.1
- nette/schema: ^1.2
Requires (Dev)
- phpstan/phpstan: ^1.8.2
- phpunit/phpunit: ^9.5.5
- scrutinizer/ocular: ^1.8.1
- unleashedtech/php-coding-standard: ^3.1
- vimeo/psalm: ^4.7.3
This package is auto-updated.
Last update: 2024-09-22 00:17:26 UTC
README
league/config 帮助您使用严格的模式定义嵌套的配置数组,并通过点符号访问配置值。它由 Colin O'Dell 创建。
📦 安装
此项目需要 PHP 7.4 或更高版本。要通过 Composer 安装,只需运行
composer require league/config
🧰️ 基本用法
Configuration
类提供了您定义配置结构和获取值所需的一切
use League\Config\Configuration; use Nette\Schema\Expect; // Define your configuration schema $config = new Configuration([ 'database' => Expect::structure([ 'driver' => Expect::anyOf('mysql', 'postgresql', 'sqlite')->required(), 'host' => Expect::string()->default('localhost'), 'port' => Expect::int()->min(1)->max(65535), 'ssl' => Expect::bool(), 'database' => Expect::string()->required(), 'username' => Expect::string()->required(), 'password' => Expect::string()->nullable(), ]), 'logging' => Expect::structure([ 'enabled' => Expect::bool()->default($_ENV['DEBUG'] == true), 'file' => Expect::string()->deprecated("use logging.path instead"), 'path' => Expect::string()->assert(function ($path) { return \is_writeable($path); })->required(), ]), ]); // Set the values, either all at once with `merge()`: $config->merge([ 'database' => [ 'driver' => 'mysql', 'port' => 3306, 'database' => 'mydb', 'username' => 'user', 'password' => 'secret', ], ]); // Or one-at-a-time with `set()`: $config->set('logging.path', '/var/log/myapp.log'); // You can now retrieve those values with `get()`. // Validation and defaults will be applied for you automatically $config->get('database'); // Fetches the entire "database" section as an array $config->get('database.driver'); // Fetch a specific nested value with dot notation $config->get('database/driver'); // Fetch a specific nested value with slash notation $config->get('database.host'); // Returns the default value "localhost" $config->get('logging.path'); // Guaranteed to be writeable thanks to the assertion in the schema // If validation fails an `InvalidConfigurationException` will be thrown: $config->set('database.driver', 'mongodb'); $config->get('database.driver'); // InvalidConfigurationException // Attempting to fetch a non-existent key will result in an `InvalidConfigurationException` $config->get('foo.bar'); // You could avoid this by checking whether that item exists: $config->exists('foo.bar'); // Returns `false`
📓 文档
完整文档可在 config.thephpleague.com 找到。
💭 哲学
这个库旨在提供一个 简单但具有见解 的配置方法,目标如下
- 配置应在 具有嵌套值的数组 上操作,这些值易于访问
- 配置结构应以 严格的模式 定义,定义整体结构、允许的类型和允许的值
- 模式应使用 简单、流畅的接口 定义
- 您应该能够 添加和组合模式,但不能修改现有的模式
- 配置值和模式都应 使用 PHP 代码定义和管理
- 模式应该是 不可变的;一旦设置,它们不应再改变
- 配置值不应定义或影响模式
因此,这个库可能 永远不会 支持以下功能
- 使用 YAML、XML 或其他文件加载和/或导出配置值或模式
- 从命令行或其他用户界面解析配置值
- 根据其他配置值动态更改模式、允许的值或默认值
如果您需要这些功能,您应该查看其他库,如
- symfony/config
- symfony/options-resolver
- hassankhan/config
- consolidation/config
- laminas/laminas-config
🏷️ 版本控制
严格遵循 SemVer。次要和补丁版本不应引入对代码库的破坏性更改。
任何标记为 @internal
的类或方法都不打算在库外部使用,并且可能在任何时候进行破坏性更改,因此请避免使用它们。
🛠️ 维护和支持
当发布新的 次要 版本(例如 1.0
-> 1.1
)时,上一个版本(1.0
)将至少继续接收安全性和关键错误修复 3 个月。
当发布新的 主要 版本时(例如 1.1
-> 2.0
),上一个版本(1.1
)将至少接收关键错误修复 3 个月,并在新版本发布后的 6 个月内接收安全更新。
(此政策可能在将来发生变化,并且可能根据具体情况做出例外。)
👷️ 贡献
欢迎为这个库做出贡献!我们只要求您遵守我们的贡献指南,并避免做出与上述哲学相冲突的更改。
🧪 测试
composer test
📄 许可证
league/config 采用BSD-3许可证。有关更多详细信息,请参阅LICENSE.md
文件。
🗺️ 谁在使用它?
此项目由league/commonmark使用。