league/config

使用严格的模式定义配置数组,并通过点符号访问值

v1.2.0 2022-12-11 20:36 UTC

This package is auto-updated.

Last update: 2024-09-22 00:17:26 UTC


README

Latest Version Total Downloads Software License Build Status Coverage Status Quality Score Sponsor development of this project

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 或其他文件加载和/或导出配置值或模式
  • 从命令行或其他用户界面解析配置值
  • 根据其他配置值动态更改模式、允许的值或默认值

如果您需要这些功能,您应该查看其他库,如

🏷️ 版本控制

严格遵循 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使用。