【问题标题】:Editing bootstrap.php to customize Dotenv behaviour编辑 bootstrap.php 以自定义 Dotenv 行为
【发布时间】:2020-01-18 00:23:42
【问题描述】:

我对 Symfony Dotenv 默认行为不满意,因为我想要一个 .env.override,它会覆盖现有的环境值。

所以我想在config/bootstrap.php中添加以下代码

$envLocal = dirname(__DIR__).'/.env.override';
if (file_exists($envLocal)) {
    (new Dotenv(false))->overload($envLocal);
}

编辑此文件 (config/bootstrap.php) 有问题吗?未来的 Symfony 更新可以删除它吗?

【问题讨论】:

  • tbh,我不明白这一点。 .env 应该是一个 local 文件!本地文件的默认值在 .env.dist 中,而 .env 数据的包含在 config/**.yaml 中……所以从技术上讲,.env 已经是覆盖。你现在想要覆盖覆盖吗?
  • @Jakumi 谢谢你的评论;实际上,出于我不会在这里解释的原因,我们不会在我们的项目中使用.env.dist(即使这是一个好主意)。这就是为什么我的问题是关于修改config/bootstrap.php
  • 根据您的 DotEnv 组件版本,较新版本的 DotEnv 和引导程序将具有 .env.local 的标准行为,以便在本地轻松覆盖环境变量。同样在生产环境中,您通常希望从 nginx/apache、docker 或作为服务器 env var 覆盖 ENV 变量。当然这是真的,正如下面的答案所说,你可以修改 bootstrap.php,我真的不明白你为什么要这样做:)
  • @ReinBaarsma 谢谢,我同意这不是正确的解决方案。另一个问题的目标是进一步解决这个问题,因为实际上,它可能需要处理 docker (.. 或者不是,现在有点神秘),因为覆盖在生产中运行良好,但不是在码头环境中。谢谢大家。
  • @yolenoyer 在我们的项目中,我们使用了一个简单的.env,它包含了本地开发所需的一切(显然没有任何生产机密),并且只存在于 git 中。对于生产,我们通过 kubernetes 和一个加密的配置文件在 AWS 中设置了环境变量,但听起来您的生产情况已经开始工作了。 docker 的一个很酷的地方在于,您实际上并不需要 .env.local 覆盖,因为所有开发人员都应该拥有相同的 docker,因此也应该拥有相同的 .env 变量。

标签: php symfony phpdotenv


【解决方案1】:

您可以随意修改bootstrap.php

该文件是在您运行 create-project symfony/skeleton 时创建的,但它是您的应用程序文件的一部分(它不是依赖项),因此您有责任维护它,并根据需要使用它。

实际上,如果您将您的应用程序升级到一个 Symfony 版本,该版本期望 bootstrap.php(或public/index.php,或(bin/console)的不同行为,您可能需要更新这些文件(以及其他文件)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-18
    • 2014-05-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多