yosymfony / config-serviceprovider
基于 Symfony Config 组件的 Silex 配置 ServiceProvider,支持 YAML、TOML 和 JSON
Requires
- php: >=5.3.0
- silex/silex: ~1.0
- symfony/config: 2.4.*@dev
- symfony/yaml: 2.4.*@dev
- yosymfony/toml: 0.2.*@dev
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。
安装
使用 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