如何在Laravel控制台命令中加载自定义.env文件?

如何在Laravel控制台命令中加载自定义.env文件?,laravel,laravel-environment,laravel-console,Laravel,Laravel Environment,Laravel Console,我有以下控制台命令代码: class MyCommand扩展命令 { 受保护的$signature='custom:mycommand{domain}'; // ... 公共函数句柄() { $domain=$this->argument('domain'); //读取基于域的.env文件,如:.env.example.com $dotenv=\dotenv\dotenv::createImmutable(base_path(),“.env.”.$domain); $dotenv->load()

我有以下控制台命令代码:

class MyCommand扩展命令
{
受保护的$signature='custom:mycommand{domain}';
// ...
公共函数句柄()
{
$domain=$this->argument('domain');
//读取基于域的.env文件,如:.env.example.com
$dotenv=\dotenv\dotenv::createImmutable(base_path(),“.env.”.$domain);
$dotenv->load();
dd(环境(“应用程序URL”);
// ...
返回0;
}
}
dd()
行中,它应该打印我作为参数给出的域(来自
.env.example.com
),但仍然打印
.env
文件中的数据

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

$host=request()->getHost();
//读取基于域的.env文件,如:.env.example.com
$dotenv=\dotenv\dotenv::createImmutable(base_path(),'.env.'.$host);
$dotenv->load();

知道如何在console命令中使其工作吗?

不变性是指是否允许Dotenv覆盖现有的环境变量。
如果希望Dotenv覆盖现有环境变量,请改用asMutable

我就是这样用的

   $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());
        }
    }


您是否尝试过('.env.example.com');其中
$app
是您的Laravel应用程序。是的,也没有成功
\Dotenv\Dotenv::createMutable
是解决方案!谢谢!