91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么做到Laravel配置可以網站后臺配置

發布時間:2021-12-28 16:57:44 來源:億速云 閱讀:161 作者:小新 欄目:大數據

這篇文章將為大家詳細講解有關怎么做到Laravel配置可以網站后臺配置,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

需求場景

首先,ThinkSNS+ 作為一個用戶可以使用的「社交系統」和開源網站程序一樣擁有后臺,有一些配置,Laravel 是要求寫在 /config/*.php 的配置文件中的,例如 app.name、app.debug 等信息的配置,以及 Jobs 的驅動配置,廣播系統的配置等,我們都搬到了網站后臺,用戶安裝后可以不用修改配置文件的情況下鏡像配置。

如何覆蓋配置

我們首先打開 Illuminate\Foundation\Application::bootstrapWith 方法,代碼如下:
怎么做到Laravel配置可以網站后臺配置

重點代碼在 $this['events']->fire('bootstrapping: '.$bootstrapper, [$this]); 和 $this['events']->fire('bootstrapped: '.$bootstrapper, [$this]); 上,很明顯是加載并運行 bootstrapper 的前置和后置事件。

所以,我們看還有一個方法叫做 beforeBootstrapping 和 afterBootstrapping 然后怎么做呢?我們看
怎么做到Laravel配置可以網站后臺配置

沒錯,這里是固定了順序的,我錯誤的加載順序,會造成laravel的失敗,所以,我們選擇在之前繼承 Illuminate\Foundation\Application 的應用基礎上增加一個事件,代碼如下:
怎么做到Laravel配置可以網站后臺配置

哪里添加的事件

因為 ThinkSNS+ 是繼承了 Illuminate\Foundation\Application 實現了新的 Application 類,所以我們直接在構造方法里面增加了代碼。
這樣,當 Laravel 啟動,但是還沒有加載 bootstrapper 的時候,已經把 加載配置的后置事件注入進去了。當加載配置執行完成后就會執行我注入的后置事件。

后置事件的實現

我們在創建了 \Zhiyi\Plus\Bootstrap\LoadConfiguration 這樣一個類,注冊為后置事件,路徑為: /app/Bootstrap/LoadConfiguration.php ,然后實現代碼如下:
怎么做到Laravel配置可以網站后臺配置

很簡單,因為 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 這樣的形式進行深曾鍵值賦值,利用這一個特性,這個函數將 多維數組轉換為一維。
效果:
怎么做到Laravel配置可以網站后臺配置

然后調用 app('config')->set($arr) 就對 Laravel 的 config 進行了 depth merge。
最后,持久化保存的 YAML 內容如下:
怎么做到Laravel配置可以網站后臺配置

所以,基于 depth merge 在 .plus.yml 配置中,只需要保存部分配置,即可不想配置結構的完整性的情況下對 Laravel 鏡像配置合并。

關于“怎么做到Laravel配置可以網站后臺配置”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

长顺县| 特克斯县| 越西县| 天津市| 池州市| 黔西| 钟山县| 福建省| 阿图什市| 炉霍县| 依安县| 阿巴嘎旗| 巴彦县| 岫岩| 鄂伦春自治旗| 巫溪县| 大竹县| 德钦县| 永昌县| 黎城县| 双牌县| 公安县| 桓台县| 镇坪县| 鹤壁市| 台前县| 平谷区| 怀安县| 大石桥市| 石渠县| 西盟| 甘孜县| 共和县| 深泽县| 霍林郭勒市| 札达县| 高雄市| 惠东县| 夏津县| 淄博市| 轮台县|