在 Laravel 框架中,所有配置文件都存儲在 “config” 目錄中。每個配置選項都有詳細(xì)的文檔說明,因此可以隨時瀏覽這些文件,以熟悉可用的配置選項。這些配置文件允許定義核心配置值,如數(shù)據(jù)庫連接信息、郵件服務(wù)器信息、應(yīng)用時區(qū)和加密密鑰等。
一、使用About命令
Laravel 提供了一個 “about” Artisan 命令,可以快速顯示應(yīng)用配置、驅(qū)動程序和環(huán)境的概況:
php artisan about
如果只對輸出的特定部分感興趣,可以使用 “–only” 選項來過濾該部分。例如,若只想查看環(huán)境信息:
php artisan about --only=environment
此外若要詳細(xì)探索特定配置文件的值,可以使用 “config:show” Artisan 命令:
php artisan config:show database
二、Laravel環(huán)境配置
根據(jù)應(yīng)用程序運行的環(huán)境,使用不同的配置值通常非常有用。例如,在本地和生產(chǎn)服務(wù)器上,可能希望使用不同的緩存驅(qū)動程序。為此,Laravel 采用了 DotEnv PHP 庫進(jìn)行環(huán)境管理。在新安裝的 Laravel 應(yīng)用中,會發(fā)現(xiàn)根目錄包含一個 ” .env.example” 文件,該文件定義了一些常見的環(huán)境變量。在安裝過程中,此文件會自動復(fù)制為 “.env”。
Laravel 的默認(rèn) “.env” 文件包含了一些常見的配置值,這些值會根據(jù)應(yīng)用程序是運行在本地環(huán)境還是生產(chǎn) Web 服務(wù)器上而發(fā)生變化。這些配置值由 “config” 目錄中的配置文件利用 Laravel 的 “env” 函數(shù)讀取。
如果與團隊協(xié)同開發(fā),建議繼續(xù)更新 “.env.example” 文件。通過在示例配置文件中使用占位符值,團隊成員可以清楚地了解運行應(yīng)用程序所需的環(huán)境變量。
注意: “.env” 文件中的變量可以被外部環(huán)境變量(如服務(wù)器級或系統(tǒng)級環(huán)境變量)覆蓋。
1、環(huán)境文件的安全
在開發(fā)過程中, “.env” 文件不應(yīng)提交到源代碼控制中,因為每個開發(fā)者或服務(wù)器可能需要不同的環(huán)境配置。如果攻擊者有機會訪問源代碼庫,敏感憑據(jù)可能會被泄露,造成安全風(fēng)險。不過,Laravel 允許加密環(huán)境文件,以便可以安全地將其添加到源代碼控制中。
2、額外的環(huán)境文件
在加載應(yīng)用程序的環(huán)境變量之前,Laravel 會檢查當(dāng)前是否已經(jīng)設(shè)置了 “APP_ENV” 環(huán)境變量,或者是否在命令行中指定了 “–env” 參數(shù)。如果存在,Laravel 會嘗試加載對應(yīng)的 “.env.[APP_ENV]” 文件;如果不存在,則加載默認(rèn)的 “.env” 文件。
3、環(huán)境變量類型
在 “.env” 文件中的所有變量通常會被解析為字符串。為了解決這個問題,Laravel 中定義了一些保留值,以便 “env()” 函數(shù)可以返回更廣泛的類型范圍:
如果需要定義一個包含空格的環(huán)境變量值,可以使用雙引號括起來:
APP_NAME="我的應(yīng)用"
三、檢索環(huán)境配置
當(dāng)應(yīng)用程序接收到請求時,”.env” 文件中列出的所有變量將被加載到 PHP 的 “$_ENV” 超全局變量中??梢栽谂渲梦募型ㄟ^使用 “env” 函數(shù)來檢索這些變量的值。例如,在 Laravel 的配置文件中通常會看到如下使用:
'debug' => env('APP_DEBUG', false),
傳遞給 “env” 函數(shù)的第二個參數(shù)是“默認(rèn)值”,如果指定的環(huán)境變量不存在,則返回此默認(rèn)值。
四、確定當(dāng)前環(huán)境
當(dāng)前應(yīng)用環(huán)境由 “.env” 文件中的 “APP_ENV” 變量確定。可以通過使用 “App” facade 的 “environment()” 方法訪問此值:
use Illuminate\Support\Facades\App; $environment = App::environment();
還可以向 “environment()” 方法傳遞參數(shù),以檢查環(huán)境是否匹配給定值。如果環(huán)境與任何給定值匹配,該方法將返回 “true”:
if (App::environment('local')) { // 環(huán)境是本地 } if (App::environment(['local', 'staging'])) { // 環(huán)境是本地或 staging }
通過以上概述,將能夠掌握 Laravel 應(yīng)用程序的配置與環(huán)境管理方式,從而更好地適應(yīng)不同的開發(fā)場景。
五、Laravel環(huán)境文件加密與配置管理
未加密的環(huán)境文件不應(yīng)存儲在源代碼控制中,因為它們可能包含敏感信息。Laravel 提供了加密功能,使可以安全地存儲環(huán)境文件并將其添加到源代碼控制中。
1、環(huán)境文件的加密
要加密環(huán)境文件,請使用 “env:encrypt” Artisan 命令:
php artisan env:encrypt
執(zhí)行該命令后,Laravel 將加密 “.env” 文件,并將加密后的內(nèi)容保存在 “.env.encrypted” 文件中。加密密鑰會在命令輸出中顯示,務(wù)必將其存儲在安全的密碼管理器中。如果希望使用自定義加密密鑰,可以在命令中通過 “–key” 選項提供:
php artisan env:encrypt --key=3UVsEgGVK36XN82KKeyLFMhvosbZN1aF
如果應(yīng)用程序有多個環(huán)境文件(例如 “.env” 和 “.env.staging”),可以使用 “–env” 選項指定要加密的環(huán)境文件:
php artisan env:encrypt --env=staging
2、環(huán)境文件的解密
要解密環(huán)境文件,請使用 “env:decrypt” Artisan 命令。此命令需要提供解密密鑰,Laravel 默認(rèn)從環(huán)境變量 “LARAVEL_ENV_ENCRYPTION_KEY” 中獲取此密鑰:
php artisan env:decrypt
或者也可以通過 “–key” 選項直接提供解密密鑰:
php artisan env:decrypt --key=3UVsEgGVK36XN82KKeyLFMhvosbZN1aF
調(diào)用 “env:decrypt” 命令后,Laravel 將解密 “.env.encrypted” 文件,并將解密后的內(nèi)容寫入 “.env” 文件中。
同時該命令還支持自定義加密算法,通過 “–cipher” 選項指定:
php artisan env:decrypt --key=qUWuNRdfuImXcKxZ --cipher=AES-128-CBC
如果應(yīng)用程序有多個環(huán)境文件,可以通過 “–env” 選項指定特定的環(huán)境文件:
php artisan env:decrypt --env=staging
為了覆蓋現(xiàn)有的環(huán)境文件,可以在命令中添加 “–force” 選項:
php artisan env:decrypt --force
六、訪問配置值
在 Laravel 中,可以通過 “Config” facade 或全局的 “config” 函數(shù)輕松訪問配置值。采用“點”語法可訪問配置項,指定文件名及所需選項的名稱,還可以提供默認(rèn)值:
use Illuminate\Support\Facades\Config; $value = Config::get('app.timezone'); $value = config('app.timezone'); // 如果配置值不存在,檢索默認(rèn)值 $value = config('app.timezone', 'Asia/Seoul');
要在運行時修改配置值,可以調(diào)用 “Config” facade 的 “set” 方法,或傳遞數(shù)組給 “config” 函數(shù):
Config::set('app.timezone', 'America/Chicago'); config(['app.timezone' => 'America/Chicago']);
為了支持靜態(tài)分析,”Config” facade 還提供了類型轉(zhuǎn)換的配置檢索方法。當(dāng)檢索到的配置值類型不匹配時,將拋出異常:
Config::string('config-key'); Config::integer('config-key'); Config::float('config-key'); Config::boolean('config-key'); Config::array('config-key');
七、配置緩存
為了提高應(yīng)用程序性能,建議使用 “config:cache” Artisan 命令將所有配置文件緩存到一個文件中,這樣框架可以快速加載配置。
php artisan config:cache
應(yīng)該將此命令作為生產(chǎn)部署過程的一部分,但在本地開發(fā)期間不應(yīng)執(zhí)行,因為開發(fā)過程中配置選項可能會頻繁改變。
一旦配置被緩存,應(yīng)用程序的 “.env” 文件在請求或 Artisan 命令期間將不會被加載,因此 “env” 函數(shù)將只返回外部的系統(tǒng)級環(huán)境變量。確保僅從應(yīng)用程序的配置文件中調(diào)用 “env” 函數(shù),以避免不必要的錯誤。
要清除緩存的配置,可以使用以下命令:
php artisan config:clear
八、配置發(fā)布
Laravel 的大多數(shù)配置文件已經(jīng)發(fā)布在您的應(yīng)用程序的 config 目錄中;然而,某些配置文件如 cors.php 和 view.php 默認(rèn)不會被發(fā)布,因為大多數(shù)應(yīng)用程序永遠(yuǎn)不需要修改它們。
可以使用 config:publish Artisan 命令來發(fā)布默認(rèn)未發(fā)布的任何配置文件:
php artisan config:publish php artisan config:publish --all