2018-06-27

配置

介紹

環(huán)境配置

檢索環(huán)境配置

確定當(dāng)前環(huán)境

訪問配置值

配置緩存

維護(hù)模式

介紹

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ī)時間部署。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,634評論 19 139
  • Spring Boot 參考指南 介紹 轉(zhuǎn)載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 47,278評論 6 342
  • 官網(wǎng) 中文版本 好的網(wǎng)站 Content-type: text/htmlBASH Section: User ...
    不排版閱讀 4,718評論 0 5
  • 一 基礎(chǔ)篇 1.1 Java基礎(chǔ) 面向?qū)ο蟮奶卣鞒橄?將一類對象的共同特征總結(jié)出來構(gòu)建類的過程。繼承:對已有類的一...
    essential_note閱讀 771評論 0 0
  • 在Andoird中,當(dāng)activity中需要處理adapter中ListView/或者其他列表的item點(diǎn)擊事件,...
    CoderBigBear閱讀 4,172評論 1 3

友情鏈接更多精彩內(nèi)容