2016-12-13 23 views
2

在我的PHP Laravel 5.3應用程序,我在我的.env文件與 APP_ENV=local可改爲APP_ENV=production我的配置設置時,我的應用程序在生產app_env設置加載不同mail_driver配置設置/實時模式。如何基於在Laravel 5.3應用程序>

在這種.env文件我也有一個MAIL_DRIVER=preview設置而它與env('MAIL_DRIVER', 'smtp')像這樣拉進我的config/mail.php配置文件:

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

所以,現在我的問題是,當我改變我的.env設置APP_ENV=localAPP_ENV=production

如何根據env('APP_ENV')設置使其加載不同的env('MAIL_DRIVER')設置?

有沒有辦法爲每個環境或不同的配置文件加載不同的.env文件,或者您如何在Laravel 5.3中處理這些文件。

我記得在舊版本的Laravel中,您只是在每個環境的config文件夾中創建一個新文件夾,但整個配置系統與舊版本不同。

+0

你爲什麼要將MAIL_DRIVER設置爲''preview'''?只需在本地和生產環境的'''.env'''文件中將''''MAIL_DRIVER''的值更改爲所需的驅動程序。 – aceraven777

回答

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文件是最有可能接受的假設它不包含任何敏感的生產價值,它有可能不應該反正。

+0

我明白你的意思了。所以我可能會創建一個'.env.local'和'.env.production'文件並且有一個簡單的函數可以運行'cp .env.local .env',這樣我就可以存儲不同的設置,並且可以在環境變化時複製它該env文件到主'.env'文件。 – JasonDavis

+0

您不應該再需要'.env.local'和'.env.production'。這些文件應該被壓縮成一個'.env.example'文件,然後你可以製作一個副本並填寫值。在生產環境中,除了配置的特定值(如keys/passwords/etc)以外,您不希望進行開發/暫存/測試? –

相關問題