1

我有这个控制台命令代码:

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,但仍然打印来自.envfile.

否则,此函数在AppServiceProvider此代码中运行良好:

$host = request()->getHost();

// read domain based .env file, like: .env.example.com
$dotenv = \Dotenv\Dotenv::createImmutable(base_path(), '.env.' . $host);
$dotenv->load();

知道如何使它在控制台命令中工作吗?

4

1 回答 1

2

不变性是指是否允许 Dotenv 覆盖现有的环境变量。
如果您希望 Dotenv 覆盖现有的环境变量,请改用 as 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());
        }
    }

于 2021-02-05T09:05:47.750 回答