什么是ThinkSNS+ ThinkSNS(簡稱TS),一款全平臺綜合性社交系統,為國內外大中小企業(yè)和創(chuàng)業(yè)者提供社會化軟件研發(fā)及技術解決方案,目前最新版本為ThinkSNS+、ThinkSNS V4、ThinkSNS【簡】。 ? 距離上一次分享差不多一周了,本文分享下利用 Laravel 的?Bootstrapping 達到網站后臺設置 laravel 配置。 需求場景 首先,ThinkSNS+ 作為一個用戶可以使用的「社交系統」和開源網站程序一樣擁有后臺,有一些配置,Laravel 是要求寫在 /config/*.php 的配置文件中的,例如 app.name、app.debug 等信息的配置,以及 Jobs 的驅動配置,廣播系統的配置等,我們都搬到了網站后臺,用戶安裝后可以不用修改配置文件的情況下鏡像配置。 如何覆蓋配置 我們首先打開 Illuminate\Foundation\Application::bootstrapWith 方法,代碼如下: 重點代碼在 $this['events']->fire('bootstrapping: '.$bootstrapper, [$this]); 和 $this['events']->fire('bootstrapped: '.$bootstrapper, [$this]); 上,很明顯是加載并運行 bootstrapper 的前置和后置事件。 所以,我們看還有一個方法叫做 beforeBootstrapping 和 afterBootstrapping 然后怎么做呢?我們看 沒錯,這里是固定了順序的,我錯誤的加載順序,會造成laravel的失敗,所以,我們選擇在之前繼承 Illuminate\Foundation\Application 的應用基礎上增加一個事件,代碼如下: 哪里添加的事件 因為 ThinkSNS+ 是繼承了 Illuminate\Foundation\Application 實現了新的 Application 類,所以我們直接在構造方法里面增加了代碼。 這樣,當 Laravel 啟動,但是還沒有加載 bootstrapper 的時候,已經把 加載配置的后置事件注入進去了。當加載配置執(zhí)行完成后就會執(zhí)行我注入的后置事件。 后置事件的實現 我們在創(chuàng)建了 \Zhiyi\Plus\Bootstrap\LoadConfiguration 這樣一個類,注冊為后置事件,路徑為: /app/Bootstrap/LoadConfiguration.php ,然后實現代碼如下: 很簡單,因為 app('config') 是一個 Illuminate\Contracts\Config\Repository 接口的實例,所以直接調用 set 方法進行配置覆蓋。 而 Zhiyi\Plus\Support\Configuration 類是封裝的自定義配置加載類,加載的配置文件存放在一個 YAML 文件中,這個類實現了 自定義配置文件的加載和保存。這樣,我們從后臺調用 API 然后 constroller 調用這個類的 save 方法進行持久化。 Zhiyi\Plus\Support\Configuration::getConfigurationBase 為什么要特殊說一下這個方法?因為這個方法的特殊性,也是 depth merge 實現的重要函數,在 Repository 中支持 app.name = value 這樣的形式進行深曾鍵值賦值,利用這一個特性,這個函數將 多維數組轉換為一維。 效果: 然后調用 app('config')->set($arr) 就對 Laravel 的 config 進行了 depth merge。 最后,持久化保存的 YAML 內容如下: 所以,基于 depth merge 在 .plus.yml 配置中,只需要保存部分配置,即可不想配置結構的完整性的情況下對 Laravel 鏡像配置合并。 開源代碼倉庫: GitHub:https://github.com/zhiyicx/thinksns-plus(點擊star,每日關注開發(fā)動態(tài)。) ? 開源不易,為了爭取開源,我們團隊做了很多努力。把基于Laravel的作品展示在大家面前,之后專欄會持續(xù)不斷的分享ThinkSNS +開發(fā)過程中的技術細節(jié)。 能看見這里的,一定是真愛~謝謝你們的愛????? 這里是傳送門: 《ThinkSNS+基于?Laravel master?分支【研發(fā)日記一】》 《ThinkSNS+研發(fā)中前端的抉擇(webpack/Vue)踩坑日記【研發(fā)日記二】》 《基于?Laravel Route?的?ThinkSNS+ Component【研發(fā)日記三】》 | |
總結
以上是生活随笔為你收集整理的ThinkSNS+在研发过程中,如何做到 Laravel 配置可以网站后台...的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。