Загрузите другой файл .env с помощью команды Symfony 4

Файл .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

Я думаю, что идея состоит в том, что помимо разработки вы должны определять свои переменные env где-то еще. Если вы посмотрите на код bin / console, вы увидите, что он загружает .env на основе существования внешней переменной APP_ENV. Конечно, проще всего сделать console_test.

Cerad 18.03.2018 13:22

Это определенно то, что следует, по крайней мере, ИМО, поддержать. Возможность запускать команду, которая, например, выполняет тесты и требует другой базы данных, требует изменения переменной среды, а возможность изменить эту + n других переменных, указав другой файл, имеет большой смысл.

Chris Brown 02.05.2018 23:05
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Symfony Station Communiqué - 17 февраля 2023 г
Symfony Station Communiqué - 17 февраля 2023 г
Это коммюнике первоначально появилось на Symfony Station , вашем источнике передовых новостей Symfony, PHP и кибербезопасности.
Управление ответами api для исключений на Symfony с помощью KernelEvents
Управление ответами api для исключений на Symfony с помощью KernelEvents
Много раз при создании api нам нужно возвращать клиентам разные ответы в зависимости от возникшего исключения.
2
2
1 632
2

Ответы 2

Я решил редактировать файл 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

Thomas Decaux 03.05.2018 14:34

Ах, я этого не видел, милый @ThomasDecaux :)

Chris Brown 03.05.2018 14:35

Убедитесь, что ваш двоичный файл app / bootstrap.php и bin / console хорошо обновлен. В моем случае я только что обновил bin / console, добавив:

require dirname(__DIR__).'/app/bootstrap.php';

Другие вопросы по теме