yosymfony/config-serviceprovider

此包已被弃用且不再维护。未建议替代包。

基于 Symfony Config 组件的 Silex 配置 ServiceProvider,支持 YAML、TOML 和 JSON

v1.2.2 2014-06-07 21:44 UTC

This package is auto-updated.

Last update: 2022-02-01 12:26:29 UTC


README

基于 Symfony Config 组件 的 Silex 配置 ServiceProvider,支持 YAML、TOML (0.2.0) 和 JSON。

Build Status Latest Stable Version Scrutinizer Quality Score Total Downloads

安装

使用 Composer 安装 Yosyfmony ConfigServiceProvider 包

在您的 composer.json 中添加以下内容并运行 composer update

"require": {
    "yosymfony/config-serviceprovider": "1.2-dev"
}

有关此包的更多信息,请参阅 Packagist

用法

注册 ServiceProvider

$app->register(new ConfigServiceProvider());

您可以设置一个文件位置的集合,其中它应该查找文件,并且仅使用文件名引用它

$app->register(new ConfigServiceProvider(array(
    __dir__.'/config',
    '/var/www/general-config'
)));

加载配置文件

$repository = $app['configuration']->load('user.yml');

// or load with absolute path:
$repository = $app['configuration']->load('/var/config/user1.yml');

.dist 文件

此库支持 .dist 文件。文件的位置遵循以下层次结构

  • filename.ext
  • filename.ext.dist(如果 filename.ext 不存在)

加载内联配置

use Yosymfony\Silex\ConfigServiceProvider\Config;

$repository = $app['configuration']->load('server: "mail.yourname.com"', Config::TYPE_YAML);
// or
$repository = $app['configuration']->load('server = "mail.yourname.com"', Config::TYPE_TOML);

仓库

配置文件被加载到仓库中。仓库是一个包装器,具有数组访问接口,提供验证配置值和与其他仓库合并的方法。

$repository->get('name', 'noname'); // If 'name' not exists return 'noname'
$repository['name']; // Get the element in 'name' key

验证配置

可以使用来自 Symfony Config 组件 的定义类来验证值和结构。例如,对于此配置文件

# Yaml file
port: 25
server: "mail.yourname.com"

您可以创建以下定义

use Symfony\Component\Config\Definition\ConfigurationInterface;
use Symfony\Component\Config\Definition\Builder\TreeBuilder;

class MyConfigDefinitions implements ConfigurationInterface
{
    public function getConfigTreeBuilder()
    {
        $treeBuilder = new TreeBuilder();
        $rootNode = $treeBuilder->root(0);
        
        $rootNode->children()
            ->integerNode('port')
                ->end()
            ->scalarNode('server')
                ->end()
        ->end();
        
        return $treeBuilder;
    }
}

并检查您的仓库: $repository->validateWith(new MyConfigDefinitions()); 如果有任何定义约束被违反,将抛出异常。

操作

操作 mergeWith 自版本 1.2.0 起已弃用,并由 union 方法替换

联合

您可以通过将仓库 A 与其他 B 联合,以 C 作为结果: $resultC = $repositoryA->union($repositoryB);$repositoryB 的值比 $repositoryA 的值具有更低的优先级。

交集

您可以通过将仓库 A 与其他 B 交集,以 C 作为结果: $resultC = $repositoryA->intersection($repositoryB);$repositoryB 的值比 $repositoryA 的值具有更低的优先级。

创建一个空仓库

创建一个空仓库非常简单。您只需要创建一个 ConfigRepository 的实例,然后使用数组接口或设置方法插入新的值

use Yosymfony\Silex\ConfigServiceProvider\ConfigRepository;

//...

$repository = new ConfigRepository();
$repository->set('key1', 'value1');
// or
$repository['key1'] = 'value1';

然后,您可以将其与其他仓库合并或验证。

单元测试

您可以使用以下命令运行单元测试

$ cd your-path/vendor/yosymfony/config-serviceprovider
$ composer.phar install --dev
$ phpunit