Laravel 5 Dotenv 用于特定子域

com*_*enk 5 laravel laravel-5 phpdotenv

我的 laravel 5 应用程序中有几个子域,每个子域都有特定的配置,如 mail、nocaptcha 等。

如何设置 .env 文件以与我的特定子域一起使用?

Mar*_*łek 5

是的,您可以.env为每个子域使用单独的文件,因此如果您在配置中使用环境变量,它将无需进行很大的修改即可工作。

创建bootstrap/env.php包含以下内容的文件:

<?php
$app->detectEnvironment(function () use ($app) {
    if (!isset($_SERVER['HTTP_HOST'])) {
        Dotenv::load($app['path.base'], $app->environmentFile());
    }

    $pos = mb_strpos($_SERVER['HTTP_HOST'], '.');
    $prefix = '';
    if ($pos) {
        $prefix = mb_substr($_SERVER['HTTP_HOST'], 0, $pos);
    }
    $file = '.' . $prefix . '.env';

    if (!file_exists($app['path.base'] . '/' . $file)) {
        $file = '.env';
    }

    Dotenv::load($app['path.base'], $file);
});
Run Code Online (Sandbox Code Playgroud)

现在修改bootstrap/app.php以加载您的自定义env.php文件。只需添加:

require('env.php');
Run Code Online (Sandbox Code Playgroud)

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

现在,您可以为每个域创建单独的环境文件,例如,如果您使用testing.appabc.testing.app并且def.testing.app您可以拥有.env主域的文件(以及所有没有自定义环境文件的子域)和.abc.env.def.env域的自定义环境变量的文件。