laravel基礎教程 —— 配置
所有設定檔都被儲存在config目錄下,並且每個設定檔裡的配置項都有文檔標註。
訪問配置值
config 全域協助方法被提供在vendor/laravel/framework/src/Illuminate/Foundation/helpers.php 檔案中,該函數允許使用 . 文法來擷取檔案內的配置項值。
$value = config('app.timezone');
你也可以在config函數傳遞第二個參數作為預設值,當找不到該配置項時返回預設值.
$value = config('app.timezone', 'Asia/Shanghai');
設定配置項的值:
config(['app.timezone' => 'Asia/Shanghai']);
環境配置
我們經常希望開發環境和生產環境具有不同的配置。比如說你在本地開發環境使用不同的緩衝驅動,而laravel基於環境的配置使之非常容易。
laravel使用了DotEnv類庫來構建基於環境的配置,預設的基於環境的配置資訊在根目錄下的.env檔案中,如果你是通過composer的方式安裝的laravel,那麼它會自動的將.env.example檔案複製並重新命名為.env, 如果不是你則需要手動做了。如果你每增加一個基於環境的配置項,你最好在.env.example中增加相同的配置項,這樣在多人協作中別人可以根據.env.example理解你的配置資訊.
每當程式接收到request請求時,應用程式會自動裝載.env檔案,並將配置資訊封裝在全域變數$_ENV中,當然你也可以通過全域輔助函數env()來進行擷取環境配置項資訊並將其設定在你的其它設定檔中,事實上,laravel已經在部分設定檔中使用這種這種方式進行配置。
'debug' => env('APP_DEBUG', false),
env函數中的第二個參數為配置項的預設值,當環境設定檔.env中沒有該配置項時會自動使用預設值。
另外你的.env配置環境不應該提交到版本控制器中,因為其它伺服器環境或者開發人員環境可能需要引入不同的環境配置。比如生產環境不應該開啟debug, 不同的開發人員的本機資料庫配置資訊可能不同。
如果你是在一個團隊中做開發,你應該在.env.example檔案中引入你增加的環境配置資訊,並提交給其它開發人員知道,這樣他們就能夠理解使用你開發的部分應該引入哪些配置資訊。
確定當前環境
當前環境是定義在.env檔案中的APP_ENV變數裡的,你可以通過App facade 的 environment 函數來擷取:
$environment = App::environment();
當然你也可以通過 全域方法 env 或 app 來擷取:
$environment = env('APP_ENV');# or$environment = app()->environment();
有時候我們需要特別識別一下當前環境是哪種環境,並根據不同的環境執行不同的商務邏輯,這時候就需要通過environment函數來進行判斷匹配了,當然你可以在其中傳遞一個或多個環境參數,只要匹配到其中任何一個都會返回true:
if (App::environment('local')) { // if env('APP_ENV') === 'local'}if (App::environment('local', 'staging')) { // env('APP_ENV') === 'local' || env('APP_ENV') === 'staging'}
緩衝配置資訊
在config目錄下有很多設定檔,設定檔中有不同的配置資訊,為了啟動程式更為迅速,我們可以在開發環境中將這些配置資訊集中到一個設定檔中,這樣,程式在被訪問時,不會每次都要載入N個檔案了,我們可以通過artisan的 config:cache命令 來做這件事情。所有設定檔被整合在一個檔案裡並被程式自動載入。
當然,在開發環境並不建議這麼做,因為開發環境我們可能會頻繁的更改配置資訊,這樣為了使配置資訊及時生效我們不得不頻繁的運行 php artisan config:cache命令, 偶爾我們會忘記執行命令。生產環境緩衝設定檔應該是常態,並且應該在版本發布時執行緩衝設定檔命令重建緩衝配置資訊。你應該將其做為自動發布的一部分。
維護模式
laravel提供了維護模式,維護模式在開啟時,所有的訪問請求都會被返回某個視圖,這個視圖是可以自訂的。如果維護模式開啟,則每個請求都會返回 503 狀態代碼。開啟維護模式的方法:
php artisan down
關閉維護模式的方法:
php artisan up
維護模式響應模板
維護模式響應的視圖模板存放在resources/views/errors/503.blade.php, 你可以自由的修改。
維護模式 & 隊列
在維護模式開啟時,隊列工作將會暫停執行,當維護模式關閉時,隊列將繼續進行處理工作。
備選方案到維護模式
由於開啟維護模式需要關閉應用程式一段時間,所以你也許可以考慮像Envoyer這種不需要關閉應用程式的持續整合服務。