在我的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文件夹中为每个环境创建一个新文件夹,但整个配置系统与旧版本不同。
答案 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文件很可能是可接受的,假设它不包含任何敏感的生产值,无论如何都不应该这样。