reva2 / config-service-provider
为Silex 2.x提供的配置ServiceProvider,支持php、json和yaml。
Requires
- silex/silex: ~2.0
Requires (Dev)
- jamesmoss/toml: ~1.1
- phpunit/phpunit: ~4.8
- symfony/yaml: ~3.1
Suggests
- jamesmoss/toml: ~1.1
- symfony/yaml: ~3.1
README
支持php、json、yaml和toml的Silex 2配置ServiceProvider。
这是基于igorw/config-service-provider的分支。
使用方法
传递配置文件
将配置文件的路径传递给ServiceProvider的构造函数。这是推荐的做法,允许你定义多个环境。
$env = getenv('APP_ENV') ?: 'prod';
$app->register(new Igorw\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->register(new Igorw\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 Igorw\Silex\ConfigServiceProvider(__DIR__."/../config/services.yml"));
注意,你需要引入~2.1
版本的symfony/yaml
包。
使用TOML
要使用TOML而不是其他支持的格式,只需传递一个以.toml
结尾的文件。
$app->register(new Igorw\Silex\ConfigServiceProvider(__DIR__."/../config/services.toml"));
注意,你需要引入~0.1
版本的jamesmoss/toml
包,并且你正在使用一个前沿的配置格式,因为TOML的规范仍在变化。
使用纯PHP
如果每次请求都读取配置文件在生产中成为性能问题,你可以使用一个纯PHP文件,它将被APC缓存。
你必须将你的配置重写为返回配置数据数组的PHP文件,并确保它以.php
结尾
$app->register(new Igorw\Silex\ConfigServiceProvider(__DIR__."/../config/prod.php"));
多个配置文件
你可以使用多个配置文件,例如,一个用于整个应用程序,一个用于特定任务的特定文件,通过多次调用$app->register()
,每次传递另一个Igorw\Silex\ConfigServiceProvider
的实例。
注册顺序
确保你在应用程序中将ConfigServiceProvider最后注册。如果你不这样做,其他Provider的默认值将覆盖你的配置。