Как загрузить пользовательский файл .env в консольную команду Laravel?
У меня есть этот код консольной команды:
class MyCommand extends Command
{
protected $signature = 'custom:mycommand {domain}';
// ...
public function handle()
{
$domain = $this->argument('domain');
// read domain based .env file, like: .env.example.com
$dotenv = \Dotenv\Dotenv::createImmutable(base_path(), '.env.' . $domain);
$dotenv->load();
dd(env('APP_URL'));
// ...
return 0;
}
}
В линейке
dd()
он должен печатать домен, который я дал в качестве параметра (исходя из
.env.example.com
, но все же распечатать данные из
.env
файл.
В противном случае эта функция хорошо работает в
AppServiceProvider
с этим кодом:
$host = request()->getHost();
// read domain based .env file, like: .env.example.com
$dotenv = \Dotenv\Dotenv::createImmutable(base_path(), '.env.' . $host);
$dotenv->load();
Любая идея, как я могу заставить его работать в консольной команде?
1 ответ
Неизменяемость относится к тому, разрешено ли Dotenv перезаписывать существующие переменные среды.
Если вы хотите, чтобы Dotenv перезаписывал существующие переменные среды, вместо этого используйте Mutable .
Вот как я его использовал.
$env_name = $this->argument('env_name');
if(!empty($env_name) && is_string($env_name)){
$dotenv = \Dotenv\Dotenv::createMutable(base_path(), $env_name);
try{
$dotenv->load();
$this->info(env('NAME'));
$this->info('The Dotenv was loaded successfully!');
} catch(\Dotenv\Exception\InvalidPathException $e){
$this->error($e->getTraceAsString());
}
}