Файл .env анализируется при запуске команды Symfony 4 (если доступен dotenv).
Это нормально работает при разработке, но я также хочу протестировать свой код (в другой среде), поэтому мне нужно загрузить еще один файл .env.
Мне нравится, что Docker сделал для запуска контейнера:
docker run -e MYVAR1 --env MYVAR2=foo --env-file ./env.list ubuntu bash
Итак, я хочу добиться того же с Symfony:
php bin/console --env-file ./.env.test
прямо сейчас я делаю это:
export $(grep -v '^#' .env.test | xargs) && php bin/console
Это определенно то, что следует, по крайней мере, ИМО, поддержать. Возможность запускать команду, которая, например, выполняет тесты и требует другой базы данных, требует изменения переменной среды, а возможность изменить эту + n других переменных, указав другой файл, имеет большой смысл.




Я решил редактировать файл bin/console напрямую, чтобы облегчить работу с другим файлом .env, что не является проблемой, поскольку это файл, который контролирует разработчик. Я обновил соответствующий раздел до:
if (!isset($_SERVER['APP_ENV'])) {
if (!class_exists(Dotenv::class)) {
throw new \RuntimeException('APP_ENV environment variable is not defined. You need to define environment variables for configuration or add "symfony/dotenv" as a Composer dependency to load variables from a .env file.');
}
}
$input = new ArgvInput();
$env = $input->getParameterOption(['--env', '-e'], $_SERVER['APP_ENV'] ?? 'dev', true);
switch ($env) {
case 'test':
(new Dotenv())->load(__DIR__.'/../.env.test');
break;
case 'dev':
default:
(new Dotenv())->load(__DIR__.'/../.env');
break;
}
Да, это именно то, что я в конце концов сделал. Подаю PR => github.com/symfony/recipes/pull/385
Ах, я этого не видел, милый @ThomasDecaux :)
Убедитесь, что ваш двоичный файл app / bootstrap.php и bin / console хорошо обновлен. В моем случае я только что обновил bin / console, добавив:
require dirname(__DIR__).'/app/bootstrap.php';
Я думаю, что идея состоит в том, что помимо разработки вы должны определять свои переменные env где-то еще. Если вы посмотрите на код bin / console, вы увидите, что он загружает .env на основе существования внешней переменной APP_ENV. Конечно, проще всего сделать console_test.