Symfony 4 将推进和利用环境变量来对程序的某些部分进行配置。在 Symfony 3.4 中我们努力令其完全成为可能。最后的一个障碍是,环境变量始终要转换为字符串。这在使用 PHP 7.1 的 type-hints 时是一个很大的问题:
1 2 3 4 | public function connect(string hostname, int port)
{
// ...
} |
如果 port
是通过一个 env var 获取到的,程序将无法工作,因为该参数将是一个字符串而非预期的整型:
1 2 | parameters:
app.connection.port: '%env(DATABASE_PORT)%' |
在 Symfony 3.4 中我们 改进了环境变量的处理 以支持 type casting。当引用一个 env var 时,你现在可以设置希望把它的值给转换成的类型了:
1 2 3 4 | parameters:
# roughly equivalent to "(int) getenv('DATABASE_PORT')"
# 基本等同于 "(int) getenv('DATABASE_PORT')"
app.connection.port: '%env(int:DATABASE_PORT)%' |
我们包括了对 bool:
, int:
, float:
和 string:
casting 的支持。但不止于此!我们也增加了一些功能来实现更为常见的 env vars 操作 (并且你可以参合使用它们)。
resolve:
利用它们的值来替换container parameter names(容器参数名称):
1 2 3 4 | parameters:
project_dir: '/foo/bar'
env(DB): 'sqlite://%%project_dir%%/var/data.db'
db_dsn: '%env(resolve:DB)%' |
file:
操作符获取给定文件的内容,而 json:
操作符把给定内容反解成一个 PHP 数组,因此你可以将其组合以获取存储在某些文件中的秘密:
1 2 3 | parameters:
env(SECRETS_FILE): '/etc/secure/example.com/secrets.json'
app.secrets: '%env(json:file:SECRETS_FILE)%' |
base64:
操作符反解给定的 base64 内容,而 const:
允许你引用任何 PHP 常量:
1 2 3 4 5 6 | parameters:
env(SOME_VALUE): 'NWE3OWExYzg2NmVmZWY5Y2ExODAwZjk3MWQ2ODlmM2U='
app.some_value: '%env(base64:SOME_VALUE)%'
env(NUM_ITEMS): 'App\\Entity\\BlogPost::NUM_ITEMS'
app.num_items: '%env(constant:NUM_ITEMS)%' |