Symfony欧宝娱乐app下载地址 3.4新增功能:高级环境变量
2017年9月22日·发表的哈维尔Eguiluz
警告:这篇文章是关于一个不受支持的Symfony版本。欧宝娱乐app下载地址有些信息可能已经过时了。阅读最新的Symfony文档欧宝娱乐app下载地址.
提供的
尼古拉斯Grekas
在# 23901.
欧宝娱乐app下载地址Symfony 4将促进和利用环境变量来配置应用程序的某些部分。在Sy欧宝娱乐app下载地址mfony 3.4中,我们正在努力使其完全成为可能。最后一个大障碍是环境变量总是转换为字符串。在使用PHP 7.1类型提示时,这是一个大问题:
1 2 3 4
公共函数连接(字符串主机名,int端口){/ /……}
的值港口
参数通过env var获得,应用程序将无法工作,因为参数将是一个字符串而不是预期的整数:
1 2
参数:app.connection.port:' % env (DATABASE_PORT) %
在Sy欧宝娱乐app下载地址mfony 3.4中我们改进了环境变量的处理支持型铸造.当引用一个env变量时,你现在可以设置你想要它的值转换为的类型:
1 2 3
参数:#大致等价于"(int) getenv('DATABASE_PORT')"app.connection.port:' % env (int: DATABASE_PORT) %
我们包括了对常规的支持bool:
,int(警官):
,浮动:
而且字符串:
铸造。但我们并没有止步于此!我们还添加了一些实用程序来执行与env vars相关的最常见操作(您可以将它们全部组合起来)。
的解决:
处理器将容器参数名称替换为它们的值:
1 2 3 4
参数:project_dir:“/ foo / bar”env (DB):sqlite: / / % % project_dir % % / var / data.db 'db_dsn:' % env(解决:DB) %
的文件:
处理程序获取给定文件的内容json:
处理器将给定的内容解码为一个PHP数组,这样你就可以将它们组合在一起以获得存储在某个文件中的秘密:
1 2 3
参数:env (SECRETS_FILE):“/ etc /安全/ example.com/secrets.json”app.secrets:' % env (json:文件:SECRETS_FILE) % '
的base64:
处理器解码给定的base64内容和常量:
允许你引用任何PHP常量:
1 2 3 4 5 6
参数:env (SOME_VALUE):“NWE3OWExYzg2NmVmZWY5Y2ExODAwZjk3MWQ2ODlmM2U = 'app.some_value:' % env (base64: SOME_VALUE) %env (NUM_ITEMS):“App \实体\博客::NUM_ITEMS”app.num_items:' % env (const: NUM_ITEMS) %
最后但同样重要的您可以定义自己的处理器在使用环境变量之前操作它们的内容。为此,定义一个实现newEnvVarProcessorInterface
并标记为container.env_var_processor
.
发表在#生活在边缘
评论
马克西米利安Berghoff
2017年9月23日说在03:35
好了!
以前的yaml数组,如locale: [de,en]?目前,当使用env变量时,它们是字符串。
但听到这些还是很高兴的。现在我可以将APP_DEBUG(int)转换为bool。酷。
以前的yaml数组,如locale: [de,en]?目前,当使用env变量时,它们是字符串。
但听到这些还是很高兴的。现在我可以将APP_DEBUG(int)转换为bool。酷。
乔治亚娜Gligor
2017年9月24日说在19:01
@Maximilian我会写一个自定义的' arrayDecoder '实现' EnvProviderInterface '为此,我认为这将是相当微不足道的。问题在于,一旦你在数组中放置了元素,你也可以强制转换它们。
评论截止。
为了确保评论保持相关性,旧帖子将被关闭。
同样的容器。Env_provider实际上是容器。env_var_processor”:)
例如' %env(myDecoder:API_PASSWORD)% ',它将把环境值解密为可用的值。
类MyDecoder实现EnvironmentOperator {
公共函数解析(字符串$value):
//用于解密的神奇东西
美元返回值;
}
}
Javier Eguiluz is a certified Symfony engineer.
Get certified! Online exams available in all countries.
Register Now