配置
介紹
Laravel 框架的所有配置文件都保存在?config?目錄中。每個選項(xiàng)都有說明,你可隨時查看這些文件并熟悉都有哪些配置選項(xiàng)可供你使用。
環(huán)境配置
對于應(yīng)用程序運(yùn)行的環(huán)境來說,不同的環(huán)境有不同的配置通常是很有用的。 例如,你可能希望在本地使用的緩存驅(qū)動不同于生產(chǎn)服務(wù)器所使用的緩存驅(qū)動。
Laravel 利用 Vance Lucas 的 PHP 庫?DotEnv?使得此項(xiàng)功能的實(shí)現(xiàn)變得非常簡單。在新安裝好的 Laravel 應(yīng)用程序中,其根目錄會包含一個?.env.example?文件。如果是通過 Composer 安裝的 Laravel,該文件會自動更名為?.env。否則,需要你手動更改一下文件名。
你的?.env?文件不應(yīng)該提交到應(yīng)用程序的源代碼控制系統(tǒng)中,因?yàn)槊總€使用你的應(yīng)用程序的開發(fā)人員 / 服務(wù)器可能需要有一個不同的環(huán)境配置。此外,在入侵者獲得你的源代碼控制倉庫的訪問權(quán)的情況下,這會成為一個安全隱患,因?yàn)槿魏蚊舾械膽{據(jù)都被暴露了。
如果是團(tuán)隊(duì)開發(fā),則可能希望應(yīng)用程序中仍包含?.env.example?文件。因?yàn)橥ㄟ^在示例配置文件中放置占位值,團(tuán)隊(duì)中的其他開發(fā)人員可以清楚地看到哪些環(huán)境變量是運(yùn)行應(yīng)用程序所必需的。你也可以創(chuàng)建一個?.env.testing?文件,當(dāng)運(yùn)行 PHPUnit 測試或以?--env=testing?為選項(xiàng)執(zhí)行 Artisan 命令時,該文件將覆蓋?.env?文件中的值。
{tip}?.env?文件中的所有變量都可被外部環(huán)境變量(比如服務(wù)器級或系統(tǒng)級環(huán)境變量)所覆蓋。
檢索環(huán)境配置
當(dāng)應(yīng)用程序收到請求時,.env?文件中列出的所有變量將被加載到 PHP 的超級全局變量?$ _ENV?中。你可以使用?env?函數(shù)檢索這些變量的值。事實(shí)上,如果你查看 Laravel 的配置文件,你就能注意到有數(shù)個選項(xiàng)已經(jīng)使用了這個函數(shù):
'debug'=>env('APP_DEBUG',false),
傳遞給?env?函數(shù)的第二個值是「默認(rèn)值」。如果給定的鍵不存在環(huán)境變量,則會使用該值。
確定當(dāng)前環(huán)境
應(yīng)用程序當(dāng)前所處環(huán)境是通過?.env?文件中的?APP_ENV?變量確定的。你可以通過?App?facade?中的?environment?方法來訪問此值:
$environment=App::environment();
你還可以傳遞參數(shù)給?environment?方法,以檢查當(dāng)前的環(huán)境配置是否與給定值匹配。 如果與給定值匹配,該方法將返回?true:
if(App::environment('local')){// The environment is local}if(App::environment(['local','staging'])){// The environment is either local OR staging...}
{tip} 應(yīng)用程序當(dāng)前所處環(huán)境檢測可以被服務(wù)器級的?APP_ENV?環(huán)境變量覆蓋。這在為相同的應(yīng)用程序配置不同的環(huán)境時是非常有用的,這樣你可以在你的服務(wù)器配置中為給定的主機(jī)設(shè)置與其匹配的給定的環(huán)境。
訪問配置值
你可以輕松地在應(yīng)用程序的任何位置使用全局?config?函數(shù)來訪問配置值。配置值的訪問可以使用「點(diǎn)」語法,這其中包含了要訪問的文件和選項(xiàng)的名稱。還可以指定默認(rèn)值,如果配置選項(xiàng)不存在,則返回默認(rèn)值:
$value=config('app.timezone');
要在運(yùn)行時設(shè)置配置值,傳遞一個數(shù)組給?config?函數(shù):
config(['app.timezone'=>'America/Chicago']);
配置緩存
為了給你的應(yīng)用程序提升速度,你應(yīng)該使用 Artisan 命令?config:cache?將所有的配置文件緩存到單個文件中。這會把你的應(yīng)用程序中所有的配置選項(xiàng)合并成一個單一的文件,然后框架會快速加載這個文件。
通常來說,你應(yīng)該把運(yùn)行?php artisan config:cache?命令作為生產(chǎn)環(huán)境部署常規(guī)工作的一部分。這個命令不應(yīng)在本地開發(fā)環(huán)境下運(yùn)行,因?yàn)榕渲眠x項(xiàng)在應(yīng)用程序開發(fā)過程中是經(jīng)常需要被更改的。
{note} 如果在部署過程中執(zhí)行?config:cache?命令,那你應(yīng)該確保只從配置文件內(nèi)部調(diào)用?env?函數(shù)。一旦配置被緩存,.env?文件將不再被加載,所有對?env?函數(shù)的調(diào)用都將返回?null。
維護(hù)模式
當(dāng)應(yīng)用程序處于維護(hù)模式時,所有對應(yīng)用程序的請求都顯示為一個自定義視圖。這樣可以在更新或執(zhí)行維護(hù)時輕松地「關(guān)閉」你的應(yīng)用程序。 維護(hù)模式檢查包含在應(yīng)用程序的默認(rèn)中間件棧中。如果應(yīng)用程序處于維護(hù)模式,則將拋出一個狀態(tài)碼為 503 的?MaintenanceModeException?異常。
要啟用維護(hù)模式,只需執(zhí)行下面的 Artisan 命令?down:
php artisan down
你還可以向?down?命令提供?message?和?retry?選項(xiàng)。其中?message?選項(xiàng)的值可用于顯示或記錄自定義消息,而?retry?值可用于設(shè)置 HTTP 請求頭中?Retry-After?的值:
php artisan down--message="Upgrading Database"--retry=60
要關(guān)閉維護(hù)模式,請使用?up?命令:
php artisan up
{tip} 你可以通過修改?resources/views/errors/503.blade.php?模板文件來自定義默認(rèn)維護(hù)模式模板。
維護(hù)模式和隊(duì)列
當(dāng)應(yīng)用程序處于維護(hù)模式時,不會處理?隊(duì)列任務(wù)。而這些任務(wù)會在應(yīng)用程序退出維護(hù)模式后再繼續(xù)處理。
維護(hù)模式的替代方案
維護(hù)模式會導(dǎo)致應(yīng)用程序有數(shù)秒的停機(jī)(不響應(yīng))時間,因此你可以考慮使用像?Envoyer?這樣的替代方案,以便與 Laravel 完成零停機(jī)時間部署。