【问题标题】:How to load different mail_driver config setting based on app_env setting in Laravel 5.3 App>如何根据 Laravel 5.3 App 中的 app_env 设置加载不同的 mail_driver 配置设置>
【发布时间】:2016-12-13 20:50:32
【问题描述】:

在我的 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('APP_ENV') 设置加载不同的env('MAIL_DRIVER') 设置?

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

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

【问题讨论】:

  • 为什么将MAIL_DRIVER 设置为preview?只需在本地和生产环境的.env 文件中将MAIL_DRIVER 值更改为您想要的驱动程序即可。

标签: php laravel config laravel-5.3


【解决方案1】:

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

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

在以前版本的 Laravel(即

让您的.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 文件不包含任何敏感的生产值,那么在您的存储库中包含您的 .env.testing 文件很可能是可以接受的,无论如何它可能不应该包含。

【讨论】:

  • 我明白你的意思。所以我可能会创建一个.env.local.env.production 文件,并有一个可以运行cp .env.local .env 的简单函数,这样我就可以存储不同的设置并在环境更改时让它将该env 文件复制到主.env 文件。
  • 您不再需要.env.local.env.production。这些应该被压缩到单个.env.example 文件中,然后您复制并填写值。除了配置的特定值(例如键/密码/等)之外,您在生产环境中不希望在开发/登台/测试中拥有什么?
猜你喜欢
  • 2017-06-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-26
  • 2019-11-22
  • 2017-05-31
  • 2017-06-14
  • 1970-01-01
相关资源
最近更新 更多