Laravel 5加载基于.env.master的env文件?

Ale*_*Zai 6 php laravel

我正在计划做类似的事情,通过在.env.master中创建变量来指定在应用程序引导期间加载的env文件,例如ENV_VER = dev.env

这是因为我有几个分支,例如development,release-1.1等.因此,通过根据主env文件中指定的名称加载env文件,开发人员不再需要将新变量复制并粘贴到其本地副本中.相反,只需指定要在主env文件中加载的env文件的版本.顺便说一句,我有几个env文件,如dev.env,1.6.env等.

可能吗?

hra*_*cek 6

当然,我自己每次倾向于"弯曲"一个框架,但总有一种方法,但并不总是最好的解决方案.我不是在这里给出一个完整的实现,只是指向你的方向,这可能对你有用.

您可以扩展Laravel的基本应用程序类Illuminate\Foundation\Application,其中包含$environmentFile在应用程序引导期间加载的变量存储环境文件,或者可能覆盖函数loadEnvironmentFrom($file)environmentFile().整个逻辑取决于你.

所以基本上你需要做的只是为了能够" .env加载"是...

创建一个扩展Laravel的新应用程序类:

namespace MyNamespace;
...

use Illuminate\Foundation\Application as App;

/**
 * I'm doing alots of magic with .env in this class
 */
class Application extends App
{
    ... 

    /**
     * The environment file to load during bootstrapping.
     *
     * @var string
     */
    protected $environmentFile = '.env.main';

    ...
}
Run Code Online (Sandbox Code Playgroud)

现在,因为我们有一个新的bootstraping类,我们必须告诉Laravel我们想要使用它.因此,您必须bootstrap/app.php在创建新实例的位置修改文件:

...
$app = new MyNamespace\Application(
    realpath(__DIR__.'/../')
);
...
Run Code Online (Sandbox Code Playgroud)

注意:为了灵感,我建议你真正看看Illuminate\Foundation\Application课程.