Я настроил некоторые команды в расписании Laravel 5. Вывод сохраняется в файле и отправляется мне по электронной почте.
Поскольку существует несколько «копий» проекта, я хочу использовать имя среды, чтобы определить, из какой копии пришло письмо.
Я пытался с помощью app()->environment()
в описании расписания — выдает ошибку:
Fatal error: Uncaught exception 'ReflectionException' with message 'Class env does not exist' in ...
Я тоже пробовал getenv('APP_ENV')
— это не вызывает никаких ошибок, но я получаю пустое имя среды.
App::environment()
тоже не работал
Все это прекрасно работает, если я использую их в обычных запросах (например, действиях контроллера или представлениях).
Есть ли способ определения текущей среды при запуске расписаний?
Спасибо
Я нашел решение.
В моем методе расписаний App \ Console \ Kernel прямо перед настройкой приложения все расписания я добавил в строку:
Dotenv::required('APP_ENV');
Имейте в виду, что вы должны use Dotenv;
или добавьте \ к строке выше из-за пространств имен.
Таким образом, система «удостоверяется», что APP_ENV загружен и app()->environment()
возвращает правильное имя среды.
Другой ответ не работает для Laravel 5.3, потому что Dotenv
не должен называться статически. Кроме того, ему нужен путь к .env
файл в качестве первого параметра.
Вы можете использовать это вместо (предполагается, что вы внутри /app/Providers/AppServiceProvider.php
):
$env = new Dotenv(realpath(__DIR__.'/../../'.'.env'));
$env->required('APP_ENV');
Лучший способ — определить среду при вызове планировщика, например:
php artisan schedule:run --env=local