loilo/simple-config

为您的应用程序或模块提供简单的持久配置

1.1.0 2019-07-23 21:12 UTC

This package is auto-updated.

Last update: 2024-09-24 07:32:22 UTC


README

Simple Config logo: two interleaved gears, representing a typical "settings" icon

简单配置

Tests Version on packagist.org

简单持久配置,灵感来源于 Sindre Sorhus 的 conf 包。

安装

composer require loilo/simple-config

用法

use Loilo\SimpleConfig\Config;

$config = new Config();

$config->set('foo', 'bar');
$config->get('foo') === 'bar';
 
// Use dot notation to access nested options
$config->set('baz.qux', true);
$config->get('baz') === [ 'qux' => true ];
 
$config->delete('foo');
$config->get('foo') === null;

方法

Config 对象上,您可以使用以下四种方法来处理数据存储 — getsethasdelete

  • 检查选项是否存在,请使用 has

    $config->has('option')
  • 读取选项,请使用 get

    $config->get('option')

    您还可以传递第二个参数作为备选值,如果找不到选项则使用(默认为 null

    $config->get('nonexistent_option', 'fallback value')
  • 读取整个配置,请使用不带参数的 get

    $config->get()
  • 写入选项(立即与配置文件同步),请使用 set

    $config->set('option', 'value')
  • 写入多个选项,请使用带关联数组的 set

    $config->set([
        'option-1' => 'value-1',
        'option-2' => 'value-2'
    ])
  • 删除选项,请使用 delete

    $config->delete('option')
  • 清除配置文件,请使用不带参数的 delete

    $config->delete()

静态访问

由于全局配置通常只需要一个 Config 实例,因此您可能不想在每个地方都手动传递该实例。

在大多数框架中,依赖注入容器为您解决了这个任务。但是,在没有任何此类机制的情况下,此包提供了 StaticConfig 类。

这是一个抽象类,您可以在项目中扩展它。您必须提供的是创建一个 Config 对象的方法。因此,最简单的实现可能如下所示

use Loilo\SimpleConfig\StaticConfig;
use Loilo\SimpleConfig\Config;

class AppConfig extends StaticConfig
{
    public static function createConfig(): Config
    {
        return new Config();
    }
}

现在您可以使用这种方式处理您的配置

AppConfig::set('foo', 'bar');
AppConfig::get('foo') === 'bar';

选项

Config 对象可以初始化为以下文档中描述的关联数组选项。

$config = new Config([
  // options go here
]);

默认值

类型: array
默认值: null

配置项的默认值

注意 1: 默认值通过浅度(非递归)合并应用:仅补充数据中的缺失 顶级 选项。

注意 2: 默认值永远不会写入配置文件,因此如果您更改了应用程序的默认值,并且用户没有明确覆盖它们,则它们也将对所有用户进行更改。

模式

类型: array
默认值: null

用于验证配置数据的 JSON 模式JSON 模式草案-07 在底层 validator 包 支持的情况下使用。

注意 1: 您的顶级模式定义必须强制为 "type": "object"

注意 2: 在您的模式中定义的默认值在验证期间应用,但通过 Config::get() 请求时不会返回。这是底层验证器的限制,因为目前没有 PHP JSON 模式验证器可以将默认值应用到已验证的数据中,并允许访问它们。

注意3:如果您的模式定义了任何必填的顶级字段,您需要提供满足模式的默认值。这可以避免在初始化空配置时出现模式违规错误。

configName

类型: string
默认值: "config"

配置文件的名称(不带扩展名)。

如果您需要为您的应用程序或模块创建多个配置文件(例如,在两个主要版本之间的不同配置文件),则非常有用。

projectName

类型: string
默认值: 调用 new Config() 最接近的 composer.json 中的 name 字段。

如果您的项目中没有 composer.json 文件,则需要指定此内容。

configDir

类型: string
默认值: 系统默认 用户配置目录

配置文件存储的位置。您可以通过覆盖此值在应用程序的文件夹中本地存储配置。

注意:如果定义了此值,将忽略 projectName 选项。

format

类型: array

有关配置格式的设置。这是一个关联数组,具有以下可能的键

  • serialize

    类型: callable
    默认值: function ($data) { return json_encode($data, JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT); }

    在写入配置文件时,将配置对象序列化为UTF-8字符串的函数。

    通常不需要此函数,但如果您想使用除JSON之外的其他格式,则可能非常有用。

  • deserialize

    类型: callable
    默认值: function ($string) { return json_decode($string, true); }

    从UTF-8字符串反序列化配置对象的函数。

    通常不需要此函数,但如果您想使用除JSON之外的其他格式,则可能非常有用。

  • extension

    类型: string
    默认值: "json"

    配置文件的文件扩展名。如果您更改了 serialize/deserialize 选项,则设置此值是合理的。

    注意:如果您使用密码加密配置,则配置文件将保存为二进制格式,并且此选项将被忽略。

password

类型: string
默认值: null

用于加密/解密配置文件的密码。这可以保护敏感数据,但它的安全性自然取决于您管理密码的方式。

注意:如果您使用密码加密配置,则配置文件将保存为二进制格式,并且将忽略 format.extension 选项。

dotNotation

类型: boolean
默认值: true

是否通过点符号访问选项。

$config->set([
    'foo' => [
        'bar' => [
            'foobar' => 'qux'
        ]
    ]
]);

// With dot notation enabled:
$config->get('foo.bar.foobar') === 'qux';
$config->get('foo')['bar']['foobar'] === 'qux';

// With dot notation disabled:
$config->get('foo.bar.foobar') === null;
$config->get('foo')['bar']['foobar'] === 'qux';

clearInvalidConfig

类型: boolean
默认值: true

如果设置为 true,则在读取配置时引发任何异常时将清除配置

启用此选项是一个很好的默认值,因为配置文件不是打算手动编辑的,所以这通常意味着配置已损坏,您的应用程序也无法对此采取任何措施。但是,如果您允许用户直接编辑配置文件,可能会出错,并且当配置无效时抛出错误可能比清除它更有用。

禁用此选项将重新抛出上述异常,并由手动处理。