如何做到 Laravel 配置可以網站後台配置【社交系統ThinkSNS+研發日記四】

來源:互聯網
上載者:User

標籤:blank   conf   trap   size   targe   width   png   利用   contract   

距離上一次分享差不多一周了, 本文分享下利用 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://www.thinksns.com/

開源不易,為了爭取開源,我們團隊做了很多努力。把基於Laravel的作品展示在大家面前,之後專欄會持續不斷的分享ThinkSNS +開發過程中的技術細節。

能看見這裡的,一定是真愛~謝謝你們的愛

如何做到 Laravel 配置可以網站後台配置【社交系統ThinkSNS+研發日記四】

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.