mvbcoding / config-service-provider
为Silex提供的配置ServiceProvider,支持php、json、yaml和toml。
Requires
- php: >=5.3.3,<8.0
- pimple/pimple: ^3.0
Requires (Dev)
- jamesmoss/toml: ^1.0
- phpunit/phpunit: ^5.4
- symfony/yaml: ^2.8|^3.0
Suggests
- jamesmoss/toml: For ToML configuration files
- symfony/yaml: For YAML configuration files
This package is auto-updated.
Last update: 2024-08-28 10:54:38 UTC
README
为Silex提供的配置ServiceProvider,支持php、json、yaml和toml。
版本1.0.0是从igorw/ConfigServiceProvider导入的。由于这个仓库已经停止维护,我自作主张创建了新的版本。这个版本的功劳全部归功于igorw。谢谢!
我还合并了一些杰出的PR中的修复
用法
传递配置文件
将配置文件的路径传递给服务提供者的构造函数。这是推荐的做法,允许您定义多个环境。
$env = getenv('APP_ENV') ?: 'prod';
$app->register(new MvbCoding\Silex\ConfigServiceProvider(__DIR__."/../config/$env.json"));
现在您可以指定一个prod
和一个dev
环境。
config/prod.json
{
"debug": false
}
config/dev.json
{
"debug": true
}
要在这两者之间切换,只需设置APP_ENV
环境变量。在apache中,可以这样操作
SetEnv APP_ENV dev
或者在nginx中通过fcgi
fastcgi_param APP_ENV dev
配置值设置在$app
对象上。例如,要检索debug
配置值,您可以简单地访问$app
中的debug
键。
$app->get('/', function() use ($app) {
echo $app['debug'];
});
为了防止您的配置覆盖应用程序上可能设置的键,您可以将一个prefix
传递给构造函数。然后,这个前缀将作为键在您的其他配置中可用
$app->register(new MvbCoding\Silex\ConfigServiceProvider(__DIR__."/../config/$env.json", array(), null, 'example'));
现在您可以像这样访问配置中定义的debug
值
$app->get('/', function() use ($app) {
echo $app['example']['debug'];
});
替换
此外,您还可以将一个替换模式数组作为第二个参数传递。
$app->register(new MvbCoding\Silex\ConfigServiceProvider(__DIR__."/../config/services.json", array(
'data_path' => __DIR__.'/data',
)));
现在您可以在配置文件中使用该模式。
/config/services.json
{
"xsl.path": "%data_path%/xsl"
}
您还可以通过使用带有%foo%
表示法的键在配置文件内部指定替换
{
"%root_path%": "../..",
"xsl.path": "%root_path%/xsl"
}
使用Yaml
要使用Yaml而不是JSON,只需传递一个以.yml
结尾的文件
$app->register(new MvbCoding\Silex\ConfigServiceProvider(__DIR__."/../config/services.yml"));
注意,您将需要引入^2.8|^3.0
版本的symfony/yaml
包。
使用TOML
要使用TOML而不是其他受支持的格式,只需传递一个以.toml
结尾的文件
$app->register(new MvbCoding\Silex\ConfigServiceProvider(__DIR__."/../config/services.toml"));
注意,您将需要引入^1.1
版本的jamesmoss/toml
包,并且您正在使用一个前沿的配置格式,因为TOML的规范仍在变化。
使用纯PHP
如果在生产中每次请求读取配置文件成为性能问题,您可以改用纯PHP文件,并且它将被APC缓存。
您必须将配置重写为返回配置数据数组的PHP文件,并确保它以.php
结尾
$app->register(new MvbCoding\Silex\ConfigServiceProvider(__DIR__."/../config/prod.php"));
多个配置文件
您可以使用多个配置文件,例如,一个用于整个应用程序,另一个用于特定任务,通过多次调用 $app->register()
,每次传递一个 MvbCoding\Silex\ConfigServiceProvider
的实例。
注册顺序
请确保您将 ConfigServiceProvider 最后注册到应用程序中。如果不这样做,其他 Provider 的默认值将覆盖您的配置。