-2

我有一个 Symfony 5.1.8 项目,我想在其中使用不同的数据库连接进行测试。为此,我将文件设置为与 my 中.env.test.local的值不同的值,就像文件中的文档状态一样:DATABASE_URL.env.local.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);to更改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"
  ...
]

APP_ENV根据-e参数正确设置,但仍然ENV_VAR是取值 from .env.local

我是否对.env-files 及其行为有误解,或者这是某种错误?

万一这很重要,我目前正在使用 PHP 7.3.24 在 Windows 10 上工作。

4

1 回答 1

0

这是我这边的配置错误。

当我第一次开始这个项目时,我并没有完全掌握多级.env文件的概念,并对可执行文件做了一些改动bin/console,以使事情对我来说“更容易”:

curl -o console.temp https://raw.githubusercontent.com/symfony/recipes/master/symfony/console/5.1/bin/console
diff console console.temp
31c31
< (new Dotenv())->bootEnv(dirname(__DIR__) . '/.env.local');
---
> (new Dotenv())->bootEnv(dirname(__DIR__).'/.env');

这当然会阻止整个 DotEnv 事物正常工作。我刚刚忘记了我介绍的这个更改,但是感谢@PierrickM 对我的问题的评论,现在一切正常!

于 2020-11-25T16:16:24.810 回答