Получить среду Laravel при выполнении графика

Я настроил некоторые команды в расписании Laravel 5. Вывод сохраняется в файле и отправляется мне по электронной почте.

Поскольку существует несколько «копий» проекта, я хочу использовать имя среды, чтобы определить, из какой копии пришло письмо.

Я пытался с помощью app()->environment() в описании расписания — выдает ошибку:

Fatal error: Uncaught exception 'ReflectionException' with message 'Class env does not exist' in ...

Я тоже пробовал getenv('APP_ENV') — это не вызывает никаких ошибок, но я получаю пустое имя среды.

App::environment() тоже не работал

Все это прекрасно работает, если я использую их в обычных запросах (например, действиях контроллера или представлениях).

Есть ли способ определения текущей среды при запуске расписаний?

Спасибо

3

Решение

Я нашел решение.

В моем методе расписаний App \ Console \ Kernel прямо перед настройкой приложения все расписания я добавил в строку:

Dotenv::required('APP_ENV');

Имейте в виду, что вы должны use Dotenv; или добавьте \ к строке выше из-за пространств имен.

Таким образом, система «удостоверяется», что APP_ENV загружен и app()->environment() возвращает правильное имя среды.

3

Другие решения

Другой ответ не работает для Laravel 5.3, потому что Dotenvне должен называться статически. Кроме того, ему нужен путь к .env файл в качестве первого параметра.

Вы можете использовать это вместо (предполагается, что вы внутри /app/Providers/AppServiceProvider.php):

$env = new Dotenv(realpath(__DIR__.'/../../'.'.env'));
$env->required('APP_ENV');
1

Лучший способ — определить среду при вызове планировщика, например:

php artisan schedule:run --env=local
0
По вопросам рекламы [email protected]