如何在 Laravel 6 中加载多个 .env 文件或从父目录加载 .env

对于使用 docker-compose 的 Laravel 应用程序,我有以下(简化的)文件夹结构:


Project

|

|-- data

    |-- ...

|-- docker

    |-- ...

|-- laravel

    |-- app

    |-- ...

    |-- .env

|-- docker-compose.yml

|-- .env

Docker-compose 设置为.env在构建容器时从项目根文件夹中的文件加载数据库连接详细信息。Laravel 也需要这些,我必须将它们复制到.envlaravel 文件夹内的文件中。


我想避免这种重复。理想情况下,我会在 Laravel 中加载两个 .env 文件,以避免将 docker-compose .env 与仅与 Laravel 相关的东西弄得一团糟。但是如果有一种干净的方法可以做到这一点,我几乎会很高兴在项目根目录中拥有一个 .env 文件。


我没有找到配置设置,但没有找到相关的方法loadEnvironmentFrom(),useEnvironmentPath()但Illuminate\Foundation\Application我不知道从哪里调用它们。我会扩展应用程序,但似乎 Dotenv 在实例化时已经加载/boostrap/app.php


希望在供应商 dolder 之外的某个地方,我可以及时更改路径或加载不同的 .env 文件,以便配置文件使用它。非常感谢帮助


慕后森
浏览 206回答 1
1回答

汪汪一只猫

用于:useEnvironmentPath()_bootstrap/app.php$app->useEnvironmentPath($env_path);或作为解决方案:$app->useEnvironmentPath(  dirname(__DIR__, 2));__DIR__返回当前文件的完整路径(因为您在bootstrap/app.php)dirname(__DIR__, 2),从您的文件位置返回 2 个步骤(在您的情况下,它返回您的Project目录路径)现在 Laravel 应该读取你的新.env文件。- 更新 -对于 HTTP 应用程序,更新app/Http/Kernel.php:use Illuminate\Routing\Router;use Illuminate\Contracts\Foundation\Application;//////    /**     * Create a new HTTP kernel instance.     *     * @param  \Illuminate\Contracts\Foundation\Application  $app     * @param  \Illuminate\Routing\Router  $router     * @return void     */    public function __construct(Application $app, Router $router)    {        $app->useEnvironmentPath(dirname(__DIR__, 3));        parent::__construct($app, $router);    }对于控制台应用程序,编辑app/Console/Kernel.php:use Illuminate\Contracts\Events\Dispatcher;use Illuminate\Contracts\Foundation\Application;/////    /**     * Create a new console kernel instance.     *     * @param  \Illuminate\Contracts\Foundation\Application  $app     * @param  \Illuminate\Contracts\Events\Dispatcher  $events     * @return void     */    public function __construct(Application $app, Dispatcher $events)    {        $app->useEnvironmentPath(dirname(__DIR__, 3));        parent::__construct($app, $events);    }并且app/Providers/AppServiceProvider.php:public function boot() {    app()->useEnvironmentPath(dirname(__DIR__, 3));}
打开App,查看更多内容
随时随地看视频慕课网APP