配置信息
配置信息
配置
介紹
Laravel 框架的所有配置文件都保存在 config
目錄中。每個選項都有說明,你可隨時查看這些文件并熟悉都有哪些配置選項可供你使用。
環(huán)境配置
對于應(yīng)用程序運行的環(huán)境來說,不同的環(huán)境有不同的配置通常是很有用的。 例如,你可能希望在本地使用的緩存驅(qū)動不同于生產(chǎn)服務(wù)器所使用的緩存驅(qū)動。
Laravel 利用 Vance Lucas 的 PHP 庫 DotEnv 使得此項功能的實現(xiàn)變得非常簡單。在新安裝好的 Laravel 應(yīng)用程序中,其根目錄會包含一個 .env.example
文件。如果是通過 Composer 安裝的 Laravel,該文件會自動更名為 .env
。否則,需要你手動更改一下文件名。
你的 .env
文件不應(yīng)該提交到應(yīng)用程序的源代碼控制系統(tǒng)中,因為每個使用你的應(yīng)用程序的開發(fā)人員 / 服務(wù)器可能需要有一個不同的環(huán)境配置。此外,在入侵者獲得你的源代碼控制倉庫的訪問權(quán)的情況下,這會成為一個安全隱患,因為任何敏感的憑據(jù)都被暴露了。
如果是團(tuán)隊開發(fā),則可能希望應(yīng)用程序中仍包含 .env.example
文件。因為通過在示例配置文件中放置占位值,團(tuán)隊中的其他開發(fā)人員可以清楚地看到哪些環(huán)境變量是運行應(yīng)用程序所必需的。你也可以創(chuàng)建一個 .env.testing
文件,當(dāng)運行 PHPUnit 測試或以 --env=testing
為選項執(zhí)行 Artisan 命令時,該文件將覆蓋 .env
文件中的值。
{tip}
.env
文件中的所有變量都可被外部環(huán)境變量(比如服務(wù)器級或系統(tǒng)級環(huán)境變量)所覆蓋。
環(huán)境變量類型
.env
文件中的所有變量都被解析為字符串,因此創(chuàng)建了一些保留值以允許你從 env()
函數(shù)中返回更多類型的變量:
.env 值 | env() 值 |
---|---|
true | (bool) true |
(true) | (bool) true |
false | (bool) false |
(false) | (bool) false |
empty | (string) '' |
(empty) | (string) '' |
null | (null) null |
(null) | (null) null |
如果你需要使用包含空格的值定義環(huán)境變量,可以通過將值括在雙引號中來實現(xiàn)。
APP_NAME="我的 應(yīng)用"
檢索環(huán)境配置
當(dāng)應(yīng)用程序收到請求時,.env
文件中列出的所有變量將被加載到 PHP 的超級全局變量 $ _ENV
中。你可以使用 env
函數(shù)檢索這些變量的值。事實上,如果你查看 Laravel 的配置文件,你就能注意到有數(shù)個選項已經(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')) { // 當(dāng)前環(huán)境是 local } if (App::environment(['local', 'staging'])) { // 當(dāng)前的環(huán)境是 local 或 staging... }
{tip} 應(yīng)用程序當(dāng)前所處環(huán)境檢測可以被服務(wù)器級的
APP_ENV
環(huán)境變量覆蓋。這在為相同的應(yīng)用程序配置不同的環(huán)境時是非常有用的,這樣你可以在你的服務(wù)器配置中為給定的主機(jī)設(shè)置與其匹配的給定的環(huán)境。
在調(diào)試頁面隱藏環(huán)境變量
當(dāng)一個異常未被捕獲并且 APP_DEBUG
環(huán)境變量為 true
時,調(diào)試頁面會顯示所有的環(huán)境變量和內(nèi)容。在某些情況下你可能想隱藏某些變量。你可以通過設(shè)置 config/app.php
配置文件中的 debug_blacklist
選項來完成這個操作。
環(huán)境變量、服務(wù)器或者請求數(shù)據(jù)中都有一些變量是可用的。因此,你可能需要將 $_ENV
和 $_SERVER
的變量加入到黑名單中:
return [ // ... 'debug_blacklist' => [ '_ENV' => [ 'APP_KEY', 'DB_PASSWORD', ], '_SERVER' => [ 'APP_KEY', 'DB_PASSWORD', ], '_POST' => [ 'password', ], ], ];
訪問配置值
你可以輕松地在應(yīng)用程序的任何位置使用全局 config
函數(shù)來訪問配置值。配置值的訪問可以使用「點」語法,這其中包含了要訪問的文件和選項的名稱。還可以指定默認(rèn)值,如果配置選項不存在,則返回默認(rèn)值:
$value = config('app.timezone');
要在運行時設(shè)置配置值,傳遞一個數(shù)組給 config
函數(shù)
config(['app.timezone' => 'America/Chicago']);
配置緩存
為了給你的應(yīng)用程序提升速度,你應(yīng)該使用 Artisan 命令 config:cache
將所有的配置文件緩存到單個文件中。這會把你的應(yīng)用程序中所有的配置選項合并成一個單一的文件,然后框架會快速加載這個文件。
通常來說,你應(yīng)該把運行 php artisan config:cache
命令作為生產(chǎn)環(huán)境部署常規(guī)工作的一部分。這個命令不應(yīng)在本地開發(fā)環(huán)境下運行,因為配置選項在應(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
選項。其中 message
選項的值可用于顯示或記錄自定義消息,而 retry
值可用于設(shè)置 HTTP 請求頭中 Retry-After
的值:
php artisan down --message="Upgrading Database" --retry=60
即使在維護(hù)模式下,也可以使用命令 allow
選項允許特定的 IP 地址或網(wǎng)絡(luò)訪問應(yīng)用程序:
php artisan down --allow=127.0.0.1 --allow=192.168.0.0/16
要關(guān)閉維護(hù)模式,請使用 up
命令:
php artisan up
{tip} 你可以通過修改
resources/views/errors/503.blade.php
模板文件來自定義默認(rèn)維護(hù)模式模板。
維護(hù)模式 & 隊列
當(dāng)應(yīng)用程序處于維護(hù)模式時,不會處理 隊列任務(wù)。而這些任務(wù)會在應(yīng)用程序退出維護(hù)模式后再繼續(xù)處理。
維護(hù)模式的替代方案
維護(hù)模式會導(dǎo)致應(yīng)用程序有數(shù)秒的停機(jī)(不響應(yīng))時間,因此你可以考慮使用像 Envoyer 這樣的替代方案,以便與 Laravel 完成零停機(jī)時間部署。