Как загрузить пользовательский файл .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());
        }
    }

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