如何做到 Laravel 配置可以網站後臺配置【社交系統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 的時候,已經把 載入配置的後置事件注入進去了。當載入配置執行完成後就會執行我注入的後置事件。
後置事件的實現
我們在建立了 \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 映象配置合併。
開源版原始碼官方正版獲取唯一渠道:關注公眾號“thinksns”,回覆“開源版”即可獲得最新原始碼壓縮檔案地址。
開原始碼倉庫:
GitHub:https://github.com/zhiyicx/thinksns-plus(點選star,每日關注開發動態。)
官網:http://
開源不易,為了爭取開源,我們團隊做了很多努力。把基於Laravel的作品展示在大家面前,之後專欄會持續不斷的分享ThinkSNS +開發過程中的技術細節。
能看見這裡的,一定是真愛~謝謝你們的愛
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31448874/viewspace-2139154/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 社交網站後端專案開發日記(二)網站後端
- 社交網站後端專案開發日記(一)網站後端
- 社交 App 系統 ThinkSNS+ PHP 開發概述APPPHP
- 基於 Laravel 的 ThinkSNS+ alpha.2 版本釋出【研發日記六】Laravel
- 社交系統ThinkSNS+第4階段IOS端研發更新發布播報iOS
- 社交系統ThinkSNS+ 效能簡述
- 社交系統ThinkSNS+技術概要
- 社交系統 ThinkSNS+ 技術概要
- 社交系統 ThinkSNS+ 3.0 更新播報
- 社交系統ThinkSNS+安裝部署演示
- 網站後臺管理系統網站
- Laravel 後臺系統Laravel
- 基於SpringBoot的後臺管理系統(資料來源配置、日誌記錄配置及實現(重點))(三)Spring Boot
- 社交系統ThinkSNS+ V1.9.1更新播報
- laravel配置系統使用問題Laravel
- Laravel 生產實踐:為個人網站配置谷歌 reCAPTCHA 身份驗證系統Laravel網站谷歌APT
- 如何在後臺修改網站資料?網站後臺如何修改字型?網站
- 如何在SAP gateway系統配置路由到後臺系統的OData服務路徑Gateway路由
- 網站怎麼修改文字,如何在網站後臺管理系統中修改頁面文字網站
- 網站後臺模板前臺修改?網站後臺的介面如何修改?網站
- 公司網站後臺修改網頁,如何在公司網站後臺修改網頁網站網頁
- 網站後臺管理如何修改?網站後臺修改自己資訊?網站
- 社交系統 ThinkSNS+ V2.2-V2.3 版本升級指南
- lucms - vue 與 Laravel 開發的後臺管理系統VueLaravel
- Laravel5.8+Layui開發的後臺管理系統LaravelUI
- 基於SpringBoot的後臺管理系統(Enchache配置、全域性異常處理(重點))(四)Spring Boot
- 網站防黑客入侵的主機系統安全配置方法網站黑客
- 公司網站系統內容修改?網站後臺頁面怎麼修改?網站
- 基於laravel及layui開發的後臺管理系統 -- laravel-wjfcmsLaravelUI
- 開源社交系統ThinkSNS+ V2.2-V2.3升級指南
- # WIN10 系統下 WSL 配置 Laravel 開發環境指南Win10Laravel開發環境
- Pbootcms網站忘記後臺帳號密碼如何重置?boot網站密碼
- laravel學習之nginx配置站點LaravelNginx
- 怎麼查詢登陸網站後臺?(如何查詢網站後臺地址)網站
- Linux系統下網路配置Linux
- 一份關於Vue-Cli5常用配置開發模板,可用作於PC網站開發、移動端網頁,後臺管理系統,開箱即用Vue網站網頁
- springboot專案配置logback日誌系統Spring Boot
- 網站後臺線上客服修改?網站模板如何修改?網站
- 【DG】dg中如何配置多個後臺observerServer