Contributed by
Nicolas Grekas
in #19681.
在管理程序配置方面,环境变量正变得愈发受欢迎。它们是the twelve-factor app(十二要素应用程序)理论中的主要概念之一。其主要先进性在于,它们可以在部署过程中“毋须任何代码改动”,乃至毋须放到代码宝库(code repository)中去接受检查。
打从第一天起,Symfony就支持环境变量,多亏了特殊的Symfony__变量。然而它们的行为却很简单:当程序的容器被构建时,那些环境变量的值将被剥离到(dumped into)已经编译好的容器之中。因此,如果这些变量在程序执行的时候被改变了,更新后的值将被忽略。
在Symfony 3.2中,我们添加了对环境变量的完整支持。第一个改进点就是,你不需要再为那些变量添加SYMFONY__
前缀(任何变量名都能工作)。第二个改进之处,是它们的值将被实时解析,因此程序将始终使用更新后的值。
为了在Symfony的任意配置文件中使用一个环境变量,使用全新的%env(VARIABLE_NAME)%
语法:
1 2 3 4 5 | # app/config/config.yml
doctrine:
dbal:
# ...
password: "%env(DB_PASSWORD)%" |
上例中,只要Symfony/Doctrine需要数据库的密码,它们就会发起调用来获取DB_PASSWORD
环境变量的值。为了避免“未定义变量”的错误产生,你可以使用env(VARIABLE_NAME): VARIABLE_VALUE
语法来定义这些变量的默认值:
1 2 3 | # app/config/parameters.yml
parameters:
env(DB_PASSWORD): s3cr3t_1234 |