为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
慕后森 2022-10-22 15:24:20
对于使用 docker-compose 的 Laravel 应用程序,我有以下(简化的)文件夹结构:Project||-- data    |-- ...|-- docker    |-- ...|-- laravel    |-- app    |-- ...    |-- .env|-- docker-compose.yml|-- .envDocker-compose 设置为.env在构建容器时从项目根文件夹中的文件加载数据库连接详细信息。Laravel 也需要这些,我必须将它们复制到.envlaravel 文件夹内的文件中。我想避免这种重复。理想情况下,我会在 Laravel 中加载两个 .env 文件,以避免将 docker-compose .env 与仅与 Laravel 相关的东西弄得一团糟。但是如果有一种干净的方法可以做到这一点,我几乎会很高兴在项目根目录中拥有一个 .env 文件。我没有找到配置设置,但没有找到相关的方法loadEnvironmentFrom(),useEnvironmentPath()但Illuminate\Foundation\Application我不知道从哪里调用它们。我会扩展应用程序,但似乎 Dotenv 在实例化时已经加载/boostrap/app.php希望在供应商 dolder 之外的某个地方,我可以及时更改路径或加载不同的 .env 文件,以便配置文件使用它。非常感谢帮助
查看完整描述

1 回答

?
汪汪一只猫

TA贡献1898条经验 获得超8个赞

用于: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));

}


查看完整回答
反对 回复 2022-10-22
  • 1 回答
  • 0 关注
  • 189 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信