【发布时间】:2021-03-07 08:27:51
【问题描述】:
我有一个 Symfony 5.1.8 项目,我想在其中使用不同的数据库连接进行测试。为此,我为文件.env.test.local 设置了与.env.local 不同的DATABASE_URL 值,就像.env 文件中的文档状态一样:
# In all environments, the following files are loaded if they exist,
# the latter taking precedence over the former:
#
# * .env.local contains default values for the environment variables needed by the app
# * .env.local.local uncommitted file with local overrides
# * .env.local.$APP_ENV committed environment-specific defaults
# * .env.local.$APP_ENV.local uncommitted environment-specific overrides
#
# Real environment variables win over .env.local files.
Symfony 似乎忽略了这些覆盖并且总是使用.env.local 中提供的值。
为了弄清楚到底发生了什么,我将bin/console 中的最后一行从$application->run($input); 更改为dd($_ENV);,以便只转储symfony 在执行期间看到的任何环境变量。
这是我不同的.env 文件的内容:
.env
APP_ENV=dev
ENV_VAR=ENV
.env.local
APP_ENV=dev
ENV_VAR=ENV_LOCAL
.env.test
APP_ENV=test
ENV_VAR=ENV_TEST
.env.test.local
APP_ENV=test
ENV_VAR=ENV_TEST_LOCAL
当我现在运行php bin/console 时,输出如下:
array:10 [
"APP_ENV" => "dev"
"ENV_VAR" => "ENV_LOCAL"
...
]
这是我所期望的。但是当我运行php bin/console -e test 时,正在打印以下内容:
array:10 [
"APP_ENV" => "test"
"ENV_VAR" => "ENV_LOCAL"
...
]
根据-e 参数,APP_ENV 设置正确,但对于ENV_VAR,仍采用来自.env.local 的值。
我对@987654348@-文件及其行为有误解还是这是某种错误?
以防万一,我目前正在使用 PHP 7.3.24 在 Windows 10 上工作。
【问题讨论】:
-
是否有可能在您的环境中定义?如最后一行所述,它们具有更高的优先级。
-
不,事实并非如此,我仔细检查了。这就是为什么我“发明”了新的
ENV_VAR,它在 Symfony 代码的其他任何地方都没有使用。 -
对我来说,它按预期工作,
string(3) "dev" string(9) "ENV_LOCAL" Symfony 4.4.15 (env: dev, debug: true) bash-4.2$ bin/console -V -e test string(4) "test" string(14) "ENV_TEST_LOCAL" Symfony 4.4.15 (env: test, debug: true)如果你在 shell 中输入env命令,你是否已经定义了任何ENV_VAR? -
ENV_VAR尚未定义。我开始认为 Windows 10 + PHP + Symfony 的行为可能很奇怪。由于您的输出中有 bash-4.2,我假设您使用的是某种 linux/unix?我要在我的另一台 linux 机器上检查一下。 -
您确定您的
bin/console是最新的吗? github.com/symfony/recipes/blob/master/symfony/console/5.1/bin/…
标签: php symfony php-7 dotenv phpdotenv