1、laravel實現的生產環境跟開發環境配置分離
通常我們會把設定檔所需要的參數放在/config下面的目錄中,這個檔案夾下面的所有檔案都會自動載入,我們使用config(檔案名稱+”.”+配置項)的方式進行訪問,但是直接修改config下面檔案的配置會很麻煩,例如我們生產環境跟開發環境不同,這就比較麻煩了,可laravel很便捷的給我們解決了這個方法,我們開發環境在根目錄配置.env檔案,config裡面的配置都通過讀取.env的方式來實現配置的自由切換,好了,我們完成了一個比較方便的事情
2、如何?一些比較固定參數的後台配置
我們日常開發系統一些不是經常會變的東西,比方說網站設定,郵箱配置,第三方登入配置。這些配置我們希望通過後台修改後我們的程式能夠像讀設定檔一樣來讀,省去了我們每初始化一套系統都得手動去修改參數配置(假設我們系統是一套一套的賣給他人的)。
這個時候中介軟體用上了,我們可以建立一個中介軟體,例如app/Http/Middleware/ResetConfig.php,然後把這個中介軟體放到app/Http/Kernel.php中的protected $middleware數組裡面,我們就可以實現寫入的設定檔讀取到config中
ResetConfig.php
public function handle($request, Closure $next){ $json_datas = $arr_datas = null; // email $file_path = storage_path('app/email.data'); if(file_exists($file_path)) { $json_datas = file_get_contents($file_path); $json_datas && $arr_datas = json_decode($json_datas, true); $arr_datas && config(['mail' => array_merge(config('mail'), $arr_datas)]); } $json_datas = $arr_datas = null; // msg $file_path = storage_path('app/msg.data'); if(file_exists($file_path)) { $json_datas = file_get_contents($file_path); $json_datas && $arr_datas = json_decode($json_datas, true); $arr_datas && config(['msg' => $arr_datas]); } return $next($request);}
Kernel.php
protected $middleware = [ \Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class, \App\Http\Middleware\ResetConfig::class, \App\Http\Middleware\Cors::class, //解決跨域];
這樣我們在開發程式的時候只用把檔案寫入到app/email.data中就可以實現了,我們的其他程式通過config方法就可以及時訪問到我們修改的配置了。