Laravel - 加载不同的 .env 文件

Laravel - Load different .env file

我需要在特定条件下加载另一个名为 .env.test 的 .env 文件。

我试图通过添加

的中间件来做到这一点
app()->loadEnvironmentFrom('.env.test');
Dotenv::create(base_path(), '.env.test')->overload();

Kernel.phpbootstrap()方法。我还尝试为此创建一个专用中间件并将其加载为 web 中间件组中的第一个。但无论哪种方式,它都会加载标准的 .env 文件。

如果我在 /bootstrap/app.php 文件中这样做,它会起作用,但我真的不想把它放在那里。

我刚弄明白:默认的 .env 文件正在 LoadEnvironmentVariables.php.

bootstrap() 方法中加载

要使用 .env.test 文件,我必须在 App/Http/Kernel.php[=23= 中重构我最初的 bootstrap() 方法] 文件看起来像这样:

public function bootstrap() 
{
    app()->loadEnvironmentFrom('.env.test');
    parent::bootstrap(); 
}

所以重要的部分是将 parent::bootstrap() 调用移到 loadEnvironmentFrom() 调用下方。

您可以使用导出命令创建一个名为 .env.test 的文件,而不是进行任何代码更改,您想要将此作为 .env 文件起诉使用终端

  1. APP_ENV=local

  2. php artisan config:cache

  3. php artisan key:generate

下面的编辑是为了解释如何设置 .env 文件 在 Illuminate\Foundation\Application class 中有方法 loadEnvironmentFrom 将文件作为参数并设置它,

得到$app

后可以使用bootstrap/app.php
$app = new Illuminate\Foundation\Application(
    $_ENV['APP_BASE_PATH'] ?? dirname(__DIR__)
 );

在这里您将拥有 Illuminate\Foundation\Application

的实例

你可以像

一样调用 loadEnvironmentFrom 函数
$app->loadEnvironmentFrom('.env.local');

可能最好使用 Kernel.php 而不是这个,我认为 bootstrap/app.php 或 kernel.php 都不会被 [= 覆盖19=],所以在使用的时候要多做计算。我添加了这个,这样它会帮助你理解这些东西。

您可以使用 APP_ENV

加载不同的环境文件

例如,如果 APP_ENV=test 则可以加载 .env.test

更多信息:https://github.com/laravel/framework/blob/6.x/src/Illuminate/Foundation/Bootstrap/LoadEnvironmentVariables.php#L41