The*_*Guy 7 php laravel laravel-6
我需要在某些条件下加载另一个名为.env.test的 .env 文件。
我尝试通过添加中间件来做到这一点
app()->loadEnvironmentFrom('.env.test');
Dotenv::create(base_path(), '.env.test')->overload();
Run Code Online (Sandbox Code Playgroud)
到Kernel.phpbootstrap()的方法。我还尝试为此创建一个专用中间件并将其加载为Web中间件组中的第一个中间件。但无论哪种方式,它都会加载标准 .env 文件。
如果我在/bootstrap/app.php文件中执行它,它就可以工作,但我真的不想把它放在那里。
我刚刚弄清楚:默认的 .env 文件正在LoadEnvironmentVariables.phpbootstrap()的方法内部加载。
要使用 .env.test 文件,我必须在App/Http/Kernel.phpbootstrap()文件中重构我的初始方法,如下所示:
public function bootstrap()
{
app()->loadEnvironmentFrom('.env.test');
parent::bootstrap();
}
Run Code Online (Sandbox Code Playgroud)
因此,最重要的部分是将调用移至parent::bootstrap()调用下方loadEnvironmentFrom()。
您可以使用导出命令创建一个名为 .env.test 的文件,而不是进行任何代码更改,您想将其作为 .env 文件使用终端
APP_ENV=local
php artisan config:cache
php artisan key:generate
下面的编辑是解释如何设置 .env 文件在Illuminate\Foundation\Application类中有一个方法loadEnvironmentFrom,该方法将文件作为参数并设置它,
bootstrap/app.php获得后即可使用$app
$app = new Illuminate\Foundation\Application(
$_ENV['APP_BASE_PATH'] ?? dirname(__DIR__)
);
Run Code Online (Sandbox Code Playgroud)
在这里你将拥有 Illuminate\Foundation\Application 的实例
你可以像这样调用 loadEnvironmentFrom 函数
$app->loadEnvironmentFrom('.env.local');
Run Code Online (Sandbox Code Playgroud)
可能最好使用 Kernel.php 而不是这个,我不认为 bootstrap/app.php 或 kernel.php 会被 覆盖composer update,所以在使用它时进行更多计算。我添加了这个,以便它可以帮助您理解这些内容。