noodlehaus/config

此包已被废弃,不再维护。未建议替代包。

轻量级配置文件加载器,支持PHP、INI、XML、JSON和YAML文件

3.0.0 2021-12-30 16:38 UTC

README

Latest version Software License Build Status Coverage Status Quality Score Total Downloads Gitter

Config是一个支持PHP、INI、XML、JSON、YML、Properties和序列化文件和字符串的文件配置加载器。

要求

Config需要PHP 5.5.9及以上版本。

重要:如果您想使用YAML文件或字符串,请在您的composer.json中引入Symfony Yaml组件

安装

安装Config的推荐方式是通过Composer。

$ composer require hassankhan/config

使用方法

Config设计得非常简单直接,您可以使用它进行加载、获取和设置。

加载文件

可以通过工厂方法load()或直接实例化来创建Config对象。

use Noodlehaus\Config;
use Noodlehaus\Parser\Json;

// Load a single file
$conf = Config::load('config.json');
$conf = new Config('config.json');

// Load values from multiple files
$conf = new Config(['config.json', 'config.xml']);

// Load all supported files in a directory
$conf = new Config(__DIR__ . '/config');

// Load values from optional files
$conf = new Config(['config.dist.json', '?config.json']);

// Load a file using specified parser
$conf = new Config('configuration.config', new Json);

根据文件扩展名或指定的解析器来解析和加载文件。如果指定了解析器,它将用于所有文件。注意,当加载多个文件时,具有重复键的条目将采用最后加载的文件的值。

当加载目录时,路径会被glob,并按名称字母顺序加载文件。

警告:不要将未信任的配置包含在PHP格式中。它可能包含并执行恶意代码。

加载字符串

可以通过工厂方法load()或直接实例化,将参数$string设置为true来创建字符串配置。

use Noodlehaus\Config;
use Noodlehaus\Parser\Json;
use Noodlehaus\Parser\Yaml;

$settingsJson = <<<FOOBAR
{
  "application": {
    "name": "configuration",
    "secret": "s3cr3t"
  },
  "host": "localhost",
  "port": 80,
  "servers": [
    "host1",
    "host2",
    "host3"
  ]
}
FOOBAR;

$settingsYaml = <<<FOOBAR
application:
    name: configuration
    secret: s3cr3t
host: localhost
port: 80
servers:
- host1
- host2
- host3

FOOBAR;

$conf = Config::load($settingsJson, new Json, true);
$conf = new Config($settingsYaml, new Yaml, true);

警告:不要将未信任的配置包含在PHP格式中。它可能包含并执行恶意代码。

获取值

获取值可以通过三种方式完成。一是使用get()方法

// Get value using key
$debug = $conf->get('debug');

// Get value using nested key
$secret = $conf->get('security.secret');

// Get a value with a fallback
$ttl = $conf->get('app.timeout', 3000);

第二种方法,就像使用数组一样使用它

// Get value using a simple key
$debug = $conf['debug'];

// Get value using a nested key
$secret = $conf['security.secret'];

// Get nested value like you would from a nested array
$secret = $conf['security']['secret'];

第三种方法,使用all()方法

// Get all values
$data = $conf->all();

设置值

尽管Config支持通过set()或数组语法设置值,但通过这种方式进行的任何更改都不会反映回源文件。按照设计,如果您需要更改配置文件,您必须手动进行。

$conf = Config::load('config.json');

// Sample value from our config file
assert($conf['secret'] == '123');

// Update config value to something else
$conf['secret'] = '456';

// Reload the file
$conf = Config::load('config.json');

// Same value as before
assert($conf['secret'] == '123');

// This will fail
assert($conf['secret'] == '456');

保存配置

可以将配置保存回除PHP格式之外的任何支持的格式。

$config = Config::load('config.json');

$ini = $config->toString(new Ini()); // Encode to string if you want to save the file yourself

$config->toFile('config.yaml');
$config->toFile('config.txt', new Serialize()); // you can also force the writer

使用默认值

有时在您的项目项目中,您可能想使用Config来存储应用程序设置,而不需要文件I/O。您可以通过扩展AbstractConfig类并填充getDefaults()方法来完成此操作

class MyConfig extends AbstractConfig
{
    protected function getDefaults()
    {
        return [
            'host' => 'localhost',
            'port'    => 80,
            'servers' => [
                'host1',
                'host2',
                'host3'
            ],
            'application' => [
                'name'   => 'configuration',
                'secret' => 's3cr3t'
            ]
        ];
    }
}

合并实例

您可能需要合并多个Config实例

$conf1 = Config::load('conf1.json');
$conf2 = Config::load('conf2.json');
$conf1->merge($conf2);

支持的配置文件示例

简单有效配置文件的示例可以在这里找到。

测试

$ phpunit

贡献

请参阅CONTRIBUTING以获取详细信息。

安全

如果您发现任何与安全相关的问题,请发送电子邮件至contact@hassankhan.me,而不是使用问题跟踪器。

鸣谢

许可证

MIT许可证(MIT)。请参阅许可证文件以获取更多信息。