我需要加载一个不同的.env文件,在某些条件下名为.env.test。
我试图通过中间件添加
app()->loadEnvironmentFrom('.env.test');
Dotenv::create(base_path(), '.env.test')->overload();
到内核.php的bootstrap()
方法。我还尝试为此创建一个专用中间件,并将其作为Web中间件组中的第一个加载。但无论哪种方式,它都会加载标准的 .env 文件。
如果我在/bootstrap/app.php文件中执行此操作,它可以工作,但我真的不想把它放在那里。
我刚刚想通了:默认的.env文件正在加载到LoadEnvironmentVariables.php的bootstrap()
方法中。
要使用 .env.test 文件,我必须在App/Http/Kernel.php文件中重组我的初始bootstrap()
方法,如下所示:
public function bootstrap()
{
app()->loadEnvironmentFrom('.env.test');
parent::bootstrap();
}
因此,最重要的部分是将parent::bootstrap()
调用移动到loadEnvironmentFrom()
调用下方。
而不是做任何代码更改,你可以使用导出命令创建一个名为.env.test的文件,你想起诉这个作为.env文件使用终端
-
APP_ENV=local
-
php artisan config:cache
-
php artisan key:generate
下面的编辑是为了解释如何设置 .env 文件IlluminateFoundationApplication
类有方法loadEnvironmentFrom
,它将文件作为参数并设置它,
您可以在获得$app
后使用bootstrap/app.php
$app = new IlluminateFoundationApplication(
$_ENV['APP_BASE_PATH'] ?? dirname(__DIR__)
);
在这里,您将拥有Illuminate\Foundation\Application的实例
你可以调用 loadEnvironmentFrom 函数,例如
$app->loadEnvironmentFrom('.env.local');
可能最好使用内核.php而不是这个,我认为引导程序/应用程序.php或内核.php都不会被composer update
覆盖,所以在使用它时进行更多的计算。我添加了这个,以便它可以帮助您理解这些东西。
您可以使用APP_ENV
加载不同的环境文件
例如,如果APP_ENV=test
则可以加载.env.test
。
更多信息: https://github.com/laravel/framework/blob/6.x/src/Illuminate/Foundation/Bootstrap/LoadEnvironmentVariables.php#L41