#php #symfony #symfony5
#php #symfony #symfony5
Вопрос:
Я хотел бы настроить staging
среду с той же конфигурацией, prod
что и среда.
Согласно документам, я действую следующим образом:
Я создаю staging
символическую ссылку, которая указывает на prod
- настройте env в .env:
APP_ENV=staging
- очистить кэш:
php bin/console cache:clear
- запрашивать URL, который не существует, чтобы вызвать ошибку 404: http://localhost:8080/an-url-that-does-not-exists
Когда APP_ENV=prod
моя пользовательская страница ошибок отображается правильно, но когда APP_ENV=staging
отображается сообщение отладки NotFoundHttpException
? Профилировщик не отображается.
Чего мне не хватает?
Ответ №1:
tldr;
Создайте .env.staging
файл и используйте его для установки APP_DEBUG
0
. Режим отладки и среда устанавливаются независимо.
По умолчанию, если вы не задали его явно, режим отладки ( APP_DEBUG
) устанавливается из среды автоматически.
Это происходит на следующих этапах:
В вашем интерфейсном контроллере ( index.php
обычно) вы найдете эту строку:
(new Dotenv())->bootEnv(dirname(__DIR__).'/.env');
И далее DotEnv::bootEnv()
вы найдете это:
$debug = $_SERVER[$k] ?? !in_array($_SERVER[$this->envKey], $this->prodEnvs, true);
Это позволит сравнить вашу APP_ENV
с массивом «сред», которые DotEnv
считаются «производственными». По умолчанию этот массив включает только prod
.
Вы можете изменить экземпляр DotEnv
, вызвав setProdEnvs()
:
(new Dotenv())
->setProdEnvs(['prod', 'staging'])
->bootEnv(dirname(__DIR__).'/.env');
… но, как правило, достаточно просто отключить режим отладки в вашем .env
файле.
Комментарии:
1. идеальный ответ, это то, что я искал. Спасибо @yivi.