saxulum / config-service-provider
为 Pimple 提供配置 ServiceProvider,支持 php、json 和 yaml。
Requires
- php: >=5.3.3,<8.0
- pimple/pimple: ~3.0
Requires (Dev)
- jamesmoss/toml: ~0.1
- phpunit/phpunit: 4.0.*
- symfony/yaml: ~2.2|~3.0
Suggests
- jamesmoss/toml: ~0.1
- symfony/yaml: ~2.2|~3.0
Replaces
README
为 Silex 提供配置 ServiceProvider,支持 php、json、yaml 和 toml。
使用方法
传递配置文件
将配置文件的路径传递给 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.2
的 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 最后注册到您的应用程序中。如果您不这样做,其他 Providers 的默认值将覆盖您的配置。