Laravel 支持动态多 env 配置读取

需要注意的是写这篇笔记的时候对应 Laravel 版本是 6.x

如何支持多 ENV 文件?

首先通过搜索引擎了解到可以通过在启动文件 bootstrap/app.php 中调用如下方法重新指定要读取的配置文件:

$app->loadEnvironmentFrom(
     '自定义.env'
);

但是随之而来的就是报错因为网上的文档是基于 5.x 的版本,于是就利用 PHPStorm 的追踪功能进入了其源码中:

/vendor/laravel/framework/src/Illuminate/Foundation/Bootstrap/LoadEnvironmentVariables.php
 /**
 * Set the directory for the environment file.
 *
 * @param  string  $path
 * @return $this
 */
public function useEnvironmentPath($path)
{
    $this->environmentPath = $path;

    return $this;
}

/**
 * Set the environment file to be loaded during bootstrapping.
 *
 * @param  string  $file
 * @return $this
 */
public function loadEnvironmentFrom($file)
{
    $this->environmentFile = $file;

    return $this;
}

注意到此方法的上一行方法了么?没错看注释就已经非常明白了:设定读取配置文件的目录,所以只要将这两个搭配起来使用即可实现读取自定义的 env 配置文件:

$app = new Illuminate\Foundation\Application(
    $_ENV['APP_BASE_PATH'] ?? dirname(__DIR__)
);

// 此处为新增的改写部分:基于域名来读取 __env 目录下的配置文件

$app->useEnvironmentPath(
    __DIR__ . '/../__env'
);
$app->loadEnvironmentFrom(
     '.' . $_SERVER['SERVER_NAME'] .'.env'
);

参考文献

本作品采用《CC 协议》,转载必须注明作者和本文链接
Just for Fun !
阿麦
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 3

swoole 这种一开始就指定好了env要怎么处理呢, 启动好后bootstrap 就不执行了

3年前 评论
阿麦 (楼主) 3年前

会导致默认的.env文件无法加载

7个月前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!