loilo / simple-config
为您的应用程序或模块提供简单的持久配置
Requires
- php: >= 7.1
- ext-json: *
- adbario/php-dot-notation: ^2.2
- defuse/php-encryption: ^2.2
- justinrainbow/json-schema: ^5.2
- loilo/find-up: ^1.0
- loilo/storage-paths: ^1.0
- loilo/traceback: ^1.0
- loilo/x-filesystem: ^1.0
- symfony/var-dumper: ^4.3
- symfony/yaml: ^4.3
- webmozart/path-util: ^2.3
Requires (Dev)
- phpunit/phpunit: ^7.5
- squizlabs/php_codesniffer: ^3.4
This package is auto-updated.
Last update: 2024-09-24 07:32:22 UTC
README
简单配置
简单持久配置,灵感来源于 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
对象上,您可以使用以下四种方法来处理数据存储 — get
、set
、has
和 delete
-
要 检查选项是否存在,请使用
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
,则在读取配置时引发任何异常时将清除配置
启用此选项是一个很好的默认值,因为配置文件不是打算手动编辑的,所以这通常意味着配置已损坏,您的应用程序也无法对此采取任何措施。但是,如果您允许用户直接编辑配置文件,可能会出错,并且当配置无效时抛出错误可能比清除它更有用。
禁用此选项将重新抛出上述异常,并由手动处理。