jasny/config

此包已被弃用且不再维护。作者建议使用 php-di/php-di 包。

配置您的应用程序

v2.0.1 2020-01-16 05:40 UTC

README

Build Status Code Coverage Scrutinizer Code Quality SensioLabsInsight

配置您的应用程序。实现 PSR-11 以用作容器。

安装

Jasny Config 已在 Packagist 上注册为 jasny/config,并可以使用 composer 轻松安装。

composer require jasny/config

使用方法

use Jasny\Config;

$config = (new Config())
  ->load('settings.yml')
  ->load('settings.dev.yml', ['optional' => true]);

加载器

  • Dir
  • Ini
  • Json
  • Yaml
    • Symfony
    • Yaml 扩展
  • Env
  • DynamoDB

DelegateLoader 可以根据类名或文件扩展名选择加载器。

对于每个加载器;如果加载器无法加载设置,则抛出 Jasny\Config\LoadException

Dir

DirLoader 加载器将在目录中遍历每个文件。它使用文件名(不带扩展名)作为键名。

option type default
recursive bool false 递归遍历子目录
optional bool false 如果目录不存在,则返回空配置
base_path string getcwd() 相对路径的基础路径

Ini

IniLoader 使用 parse_ini_file 解析 INI 文件。

option type default
process_sections bool false 按节名称分组设置
mode enum INI_SCANNER_NORMAL 解析选项的模式(关闭 = false 等)
optional bool false 如果文件不存在,则返回空配置
base_path string getcwd() 相对路径的基础路径

Json

JsonLoader 使用 json_decode 解析 JSON 文件。

option type default
optional bool false 如果文件不存在,则返回空配置
base_path string getcwd() 相对路径的基础路径

Yaml

YamlLoader 使用 yaml_parse 解析 YAML 文件。

option type default
num int 0 从流中提取的文档(0 是第一个文档)
callbacks array [] YAML 节点的内容处理器
optional bool false 如果文件不存在,则返回空配置
base_path string getcwd() 相对路径的基础路径

如果已加载 yaml 扩展,则默认使用 YamlLoader

Symfony\Yaml

YamlSymfonyLoader 是 YAML 的一个替代加载器,使用 Symfony Yaml component

option type default
optional bool false 如果文件不存在,则返回空配置
base_path string getcwd() 相对路径的基础路径

在构建加载器时,可以传递 Symfony\Component\Yaml\Parser 对象。

use Symfony\Component\Yaml;

$parser = new class() extends Yaml\Parser() {
    public function parse($value, $options = 0) {
        return parent::parseFile($value, $options | Yaml\Yaml::PARSE_CONSTANT); 
    }
}

$yamlLoader = new YamlSymfonyLoader($options, $parser);

Env

EnvLoader 将环境变量映射到设置。在映射中,设置键支持点表示法。

option type default
map array (required) 从环境名称到设置键的键值对

示例

$map = [
    "APP_SECRET" => "secret",
    "APP_DATABASE_PASSWORD" => "db.password"
];

$config->load('env', ['map' => $map]);

DynamoDB

DynamoDBLoader 允许从 AWS DynamoDB 数据库中加载设置。它期望所有设置都位于单个条目中。它将不会执行表扫描。默认情况下,整个条目被视为设置。或者,使用 settings_field 选项指定一个持有设置的 Map 字段。

option type default
string (required) DynamoDB 表名
key_field string 'key' 索引字段(通常是主索引)
key_value string (required) 用于选择条目的值
settings_field string null 在包含设置的条目内

示例

$dynamodb = Aws\DynamoDb\DynamoDbClient::factory([
    'region' => 'eu-west-1',
    'version' => '2012-08-10'
]);
 *
$config = new Jasny\Config();

$config->load($dynamodb, [
   'table' => 'config',
   'key_field' => 'key',
   'key_value' => 'myapp'
]);

DelegateLoader

DelegateLoader 是一个包含加载器的映射,可以自动根据文件扩展名或类名选择加载器。

默认情况下,它包含此库的所有加载器。您可以通过依赖注入传递一个加载器数组。

use Jasny\Config\Loader;

$loader = new Loader\DelegateLoader([
    'yaml' => new Loader\YamlLoader(['base_path' => __DIR__ . '/config']),
    'json' => new Loader\JsonLoader(['base_path' => __DIR__]) 
]);

$config = new Config([], $loader);
$config->load('composer.json');
$config->load('settings.yml');

Config

Config 对象是一个动态对象;设置作为公共属性添加。它扩展了 stdClass 对象。

在构造时,您可以传递关联数组或 stdClass 对象作为设置。

$config = new Jasny\Config([
    'foo' => 'bar',
    'db' => [
        'host' => 'localhost',
        'username' => 'root',
        'password' => 'god'
    ]
]);

可选地,您可以传递一个加载器。如果您的配置仅存在于 JSON 文件中,请考虑传递 JsonLoader。这可以节省创建 DelegateLoader 和其他文件类型的加载器。

load()

从文件或其他数据源加载新设置并将其添加到配置中。

load(string|object $source, array $options = [])

这是一个流畅的接口,因此该方法返回 $this

示例

$config = (new Config())
    ->load('composer.json')
    ->load('config/settings.yml')
    ->load($dynamoDB, ['table' => 'config', 'key_value' => 'myapp']);

merge()

将一个或多个 Config(或 stdClass)对象合并到配置中。

merge(stdClass $settings, ...)

这是一个流畅的接口,因此该方法返回 $this

get()

Config 对象实现了 PSR-11 ContainerInterface。该方法通过键在配置中查找设置。可以使用点表示法来获取子属性。

mixed get(string $key)

如果设置不存在,将抛出 Jasny\Config\Exception\NotFoundException

示例

$config->get('foo'); // bar
$config->get('db.host'); // localhost

// throws a NotFoundException
$config->get('something_random');

has()

has 方法是 PSR-11 ContainerInterface 的一部分。它检查设置是否存在。与 get() 类似,键支持点表示法。

bool has(string $key)

saveAsScript() / loadFromScript()

saveAsScript() 方法使用 var_export 创建变量的可解析字符串表示形式,并将其存储为 PHP 脚本。

500x faster caching 文章中所述,将解析后的配置存储为 PHP 脚本可以使加载它更快。

loadFromScript() 方法可以用于加载设置。建议使用此函数而不是仅仅使用 file_existsinclude,因为检查文件存在总是会击中文件系统。此函数首先检查 opcode 缓存。

$config = Config::loadFromScript('tmp/settings.php');

if (!isset($config)) {
    $config = (new Config())
        ->load('composer.json')
        ->load('config/settings.yml');
        
    $config->saveAsScript('tmp/settings.php');
}