Symfony 3.4中如何为环境变量设置默认值?
在Symfony 3.4中为环境变量设置默认值的解决方案
嘿,我来帮你搞定这个问题!Symfony 3.4的环境变量语法和新版本不一样,你试的%env(DB_PASSWORD, "default")%是后续版本才支持的写法,3.4不兼容。不过有两种靠谱的方式能实现你要的效果:
方法一:修改Dotenv加载逻辑(推荐)
Symfony 3.4用的是早期版本的Dotenv组件,我们可以在加载.env文件的时候,主动给缺失的变量设置默认值:
- 打开项目里的
app/autoload.php文件 - 修改里面的Dotenv加载代码,加上
ifNotExists方法:
use Symfony\Component\Dotenv\Dotenv; $dotenv = new Dotenv(__DIR__.'/..'); // 要是.env里没写DB_PASSWORD,就自动设成"default_password" $dotenv->ifNotExists('DB_PASSWORD', 'default_password')->load();
这样不管.env里有没有定义DB_PASSWORD,环境变量都会有值,parameters.yml里的database_password: '%env(DB_PASSWORD)%'就能正常解析了。
方法二:用参数的Fallback语法
要是不想改PHP代码,也可以在app/config/parameters.yml里用表达式实现默认值:
parameters: # 先定义一个默认参数(也可以直接把默认值写在后面) database_password_default: 'default_password' # 如果env(DB_PASSWORD)不存在,就用默认参数的值 database_password: '%env(DB_PASSWORD)%' ?: '%database_password_default%'
亲测这个写法在Symfony 3.4里是可以正常工作的。
小提醒
- 如果你用了
parameters.yml.dist,记得在这个文件里也加上对应的默认参数,方便团队里的其他小伙伴初始化项目。 - 敏感的默认密码别提交到版本控制哦!默认值只适合本地开发用,生产环境一定要在.env里明确设置真实的密码。
内容的提问来源于stack exchange,提问作者Hammerbot
相关产品推荐
相关产品推荐

