Laravel 項(xiàng)目開發(fā)規(guī)范 配置信息與環(huán)境變量

2023-02-16 17:12 更新

.env.example

因 .env 不會被納入版本控制器中,所以本地 .env 里添加變量時 必須 同步到 .env.example 中,以免影響其他項(xiàng)目參與者的工作。

變量存儲位置

假如項(xiàng)目中需要『CDN 域名』的變量,在 Laravel 中有以下幾種選項(xiàng):

  1. 硬代碼,直接寫死?!?? 可維護(hù)性低
  2. 寫死在 config/app.php 文件中。 —— ? 無法區(qū)分環(huán)境進(jìn)行配置
  3. 存儲于 .env 文件中,使用 env() 方法直接讀取。 -—— ? 雖然解決了環(huán)境變量問題但是不推薦
  4. 存儲在 .envconfig/app.php 文件中,然后使用 config() 函數(shù)來讀取?!?? 最佳實(shí)踐
  • 第一個選項(xiàng)是最古老的方法,代碼可維護(hù)性極低,一旦域名變更就只能全局替換。
  • 第二個選項(xiàng)無法區(qū)分環(huán)境,例如本地使用開發(fā)環(huán)境域名測試,線上才是正式的 CDN 域名。
  • 第三個選項(xiàng)雖然解決了環(huán)境變量的問題,并且也具備一定的靈活性,但是不夠靈活,假如你的網(wǎng)站流量巨大,需要配置幾個 CDN 域名,使其在加載靜態(tài)資源時隨機(jī)支配域名,這種做法就無法滿足需求了。
  • 第四個選項(xiàng)既支持環(huán)境變量,又具備極高的靈活性,假如遇到同樣的 CDN 多域名隨機(jī)問題,你只需要寫一個輔助方法,然后在 config/app.php 中調(diào)用即可,不需要動到任何一行業(yè)務(wù)邏輯代碼。

另外,有一種必須使用第四種方案的場景。Laravel 帶了一個 config:cache 的命令,可以用來提高配置的加載速度。這種場景,是絕對不能在業(yè)務(wù)代碼中使用 env() 方法,會獲取不到內(nèi)容。

? 正確的加載方式

.env 文件中設(shè)置:

CDN_DOMAIN=cdn.domain.com

config/app.php 文件中設(shè)置:

'cdn_domain' => env('CDN_DOMAIN', null),

程序中兩種獲取 相同配置 的方法:

  1. env('CDN_DOMAIN')
  2. config('app.cdn_domain')

在此統(tǒng)一規(guī)定:所有程序配置信息 必須 通過 config() 來讀取,所有的 .env 配置信息 必須 通過 env() 來讀取,絕不 在配置文件以外的范圍使用 env()。

有何優(yōu)勢

這樣做主要有以下幾個優(yōu)勢:

  1. 定義分明,config() 是配置信息,env() 只是用來區(qū)分不同環(huán)境;
  2. 統(tǒng)一放置于 config 中還可以利用框架的 配置信息緩存功能 來提高運(yùn)行效率;
  3. 代碼健壯性, config()env() 之上多出來一個抽象層,會使代碼更加健壯,更加靈活。


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號