如何在Laravel 5.3应用程序中基于app_env设置加载不同的mail_driver配置设置>

时间:2016-12-13 20:50:32

标签: php laravel config laravel-5.3

在我的PHP Laravel 5.3应用程序中,我在我的.env文件中使用了我的配置设置 APP_ENV=local,当我的应用处于生产/实时模式时,可以将其更改为APP_ENV=production

在该.env文件中,我还有一个MAIL_DRIVER=preview设置,该设置会被config/mail.php配置文件中的env('MAIL_DRIVER', 'smtp')拉入,如下所示:

return [
    'driver' => env('MAIL_DRIVER', 'smtp'),
]

现在我的问题是,当我将.env设置APP_ENV=local更改为APP_ENV=production

如何根据env('MAIL_DRIVER')设置加载其他env('APP_ENV')设置?

有没有办法为每个环境或不同的配置文件加载不同的.env文件,或者如何在Laravel 5.3中处理它。

我记得在旧版本的Laravel中,您只需在config文件夹中为每个环境创建一个新文件夹,但整个配置系统与旧版本不同。

1 个答案:

答案 0 :(得分:3)

使用Laravel 5,您在每个环境中都拥有.env文件的不同副本。

此文件未提交到您的存储库中。相反,您的.env.example文件就是,这就是您在环境中复制并命名为.env的文件。

在早期版本的Laravel(即< = 4)中,您可以在项目的同一检出副本中使用单独的环境文件,并在环境之间切换,但这实际上没有多大意义。

使您的.env.example文件与应用中所需的所有选项保持同步,并将其初始化为空值。当您部署到新环境时,将其复制为新文件,这样可以防止您意外地将凭据提交到您的存储库并保持简单:

cp .env.example .env

然后编辑文件并将值设置为适合该特定环境。例如,您可以将生产密钥用于某些服务,而不是使用测试API密钥。编辑,例如:

sudo vim .env # If you like VIM

sudo nano .env # If you like NANO

我刚才所说的例外是测试。 Per the documentation

  

您也可以创建.env.testing文件。当运行PHPUnit测试或使用--env = testing选项执行Artisan命令时,此文件将覆盖.env文件中的值。

在这种情况下,如果您的回购中包含.env.testing文件很可能是可接受的,假设它不包含任何敏感的生产值,无论如何都不应该这样。