ecentria / dynamic-parameters-bundle
为Symfony从环境变量中运行时检索参数
dev-master / 1.0.x-dev
2016-10-31 21:36 UTC
Requires
- symfony/config: ~2.3
- symfony/dependency-injection: ^2.6.2@dev
- symfony/expression-language: ~2.6
- symfony/http-kernel: ~2.3
- symfony/yaml: ~2.0
Conflicts
This package is auto-updated.
Last update: 2024-09-17 07:11:13 UTC
README
受incenteev/dynamic-parameters-bundle 和 %env()% 参数在Symfony 3.2中的启发。
此包提供了在Symfony 2.7(及以上)中运行时从环境变量中读取参数的方法,与Symfony 3.2中的方法相同(存在一些限制)。
安装
安装是一个两步过程
- 下载Ecentria的IncenteevDynamicParametersBundle分支
- 启用该包
步骤1:使用composer安装包
运行以下composer require命令
$ composer require ecentria/dynamic-parameters-bundle
步骤2:启用包
最后,在kernel中启用该包
// app/AppKernel.php public function registerBundles() { $bundles = array( // ... new Incenteev\DynamicParametersBundle\IncenteevDynamicParametersBundle(), ); }
使用方法
强烈建议仅将%env()%参数作为常规参数的值使用
# app/config/parameters.yml parameters: database_host: %env(DATABASE_HOST)%
然后可以在以下场景中使用database_host
parameters: # can be concatenated with strings/parameters dsn: mysql:host=%database_host%;dbname=testdb # can be used in array hosts: - localhost - %database_host% # can be used in config doctrine: dbal: connections: default: host: %database_host% # can be used as service argument services: foo: class: stdClass arguments: - %database_host%
直接使用%env(DATABASE_HOST)%
(而不是%database_host%
)有几个缺点
- 当使用动态参数时,环境变量名
DATABASE_HOST
会重复 - 此用例尚未像推荐的那样广泛测试,可能不会按预期工作
运行时检索参数
该包负责处理服务参数,但无法更改$container->getParameter()
的行为。然而,它提供了一个服务来获取考虑环境变量的参数。
$this->get('incenteev_dynamic_parameters.retriever')->get('database_host');
动态参数的默认值
有两种选择
(推荐)选项1:使用.env
文件(见vlucas/phpdotenv)
# .env file in project root DATABASE_HOST="localhost"
此选项与Symfony 3.2具有向前兼容性。
选项2:使用%default_env()%
参数
parameters: database_host: %env(DATABASE_HOST)% default_env(DATABASE_HOST): localhost
此选项与Symfony 3.2不兼容,其中默认值定义如下
parameters: database_host: %env(DATABASE_HOST)% env(DATABASE_HOST): localhost # doesn't work before Symfony 3.2
限制
- 在运行时直接从容器中获取参数将不会使用环境变量
- 应使用大写名称作为环境变量