mefworks/config

从多个来源加载配置。

v1.1.1 2020-06-26 16:36 UTC

This package is auto-updated.

Last update: 2024-09-08 21:22:04 UTC


README

Total Downloads Latest Stable Version

mef\Config 提供了一个简单、不可变的配置系统。

示例

<?php
$config = (new mef\Config\FileLoader\JsonFileLoader)->loadFile('settings.json');

echo 'The username is: ', $config['database.user'], PHP_EOL;

更完整的示例可以在 examples 目录中找到。

文件加载器

有四种加载器

  • mef\Config\FileLoader\IniFileLoader - 加载标准 INI 文件。

  • mef\Config\FileLoader\JsonFileLoader - 加载标准 JSON 文件。

  • mef\Config\FileLoader\PhpFileLoader - 包含一个 PHP 数组或可调用函数(必须返回一个数组)。

  • mef\Config\FileLoader\YamlFileLoader - 加载标准 YAML 文件(通过 symfony/yaml)。

这些加载器每个都返回一个 mef\Config\ArrayConfig 对象。

ConfigInterface

mef\Config\ConfigInterface 只定义了两个方法: getexists。两者都接受一个字符串键作为唯一参数。如果键不存在,则会抛出 mef\Config\Exception\InvalidKeyException

$config = new ArrayConfig([
  'database' => [
    'user' => 'John'
  ]
]);

if ($config->exists('database') === true) {
  echo $config->get('database')['user'], PHP_EOL;
}

ArrayConfig

mef\Config\ArrayConfig 持有一个不可变的关联数组。与任何从 mef\Config\AbstractConfig 继承而来的配置对象一样,数据可以通过点符号和/或作为数组进行访问。

echo $config->get('database.user'), PHP_EOL;
echo $config['database']['user'], PHP_EOL;
echo $config['database.user'], PHP_EOL;

CachedConfig

mef\Config\CachedConfig 是一个 ConfigInterface 对象的装饰器。它在私有数组中缓存对 get 的调用。这可以很有用,因为在常见的“如果存在则获取”操作中,无需两次解析键。

MergedConfig

mef\Config\MergedConfig 接受一个或多个 ConfigInterface 对象,并将它们合并为一个配置。

$config = new mef\Config\MergedConfig([$config1, $config2]);

配置作为构造函数中单个数组的单个参数传递,按优先级升序排列。即,$config2 覆盖 $config1

合并是这样进行的,关联数组可以包含部分覆盖。但是,基于索引的数组将被完全覆盖。