欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

怎么做到Laravel配置可以網(wǎng)站后臺(tái)配置

這篇文章將為大家詳細(xì)講解有關(guān)怎么做到Laravel配置可以網(wǎng)站后臺(tái)配置,小編覺得挺實(shí)用的,因此分享給大家做個(gè)參考,希望大家閱讀完這篇文章后可以有所收獲。

創(chuàng)新互聯(lián)是一家專業(yè)提供武安企業(yè)網(wǎng)站建設(shè),專注與網(wǎng)站設(shè)計(jì)、成都網(wǎng)站建設(shè)H5響應(yīng)式網(wǎng)站、小程序制作等業(yè)務(wù)。10年已為武安眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)的建站公司優(yōu)惠進(jìn)行中。

需求場(chǎng)景

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

如何覆蓋配置

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

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

所以,我們看還有一個(gè)方法叫做 beforeBootstrapping 和 afterBootstrapping 然后怎么做呢?我們看
怎么做到Laravel配置可以網(wǎng)站后臺(tái)配置

沒錯(cuò),這里是固定了順序的,我錯(cuò)誤的加載順序,會(huì)造成laravel的失敗,所以,我們選擇在之前繼承 Illuminate\Foundation\Application 的應(yīng)用基礎(chǔ)上增加一個(gè)事件,代碼如下:
怎么做到Laravel配置可以網(wǎng)站后臺(tái)配置

哪里添加的事件

因?yàn)?nbsp;ThinkSNS+ 是繼承了 Illuminate\Foundation\Application 實(shí)現(xiàn)了新的 Application 類,所以我們直接在構(gòu)造方法里面增加了代碼。
這樣,當(dāng) Laravel 啟動(dòng),但是還沒有加載 bootstrapper 的時(shí)候,已經(jīng)把 加載配置的后置事件注入進(jìn)去了。當(dāng)加載配置執(zhí)行完成后就會(huì)執(zhí)行我注入的后置事件。

后置事件的實(shí)現(xiàn)

我們?cè)趧?chuàng)建了 \Zhiyi\Plus\Bootstrap\LoadConfiguration 這樣一個(gè)類,注冊(cè)為后置事件,路徑為: /app/Bootstrap/LoadConfiguration.php ,然后實(shí)現(xiàn)代碼如下:
怎么做到Laravel配置可以網(wǎng)站后臺(tái)配置

很簡(jiǎn)單,因?yàn)?nbsp;app('config') 是一個(gè) Illuminate\Contracts\Config\Repository 接口的實(shí)例,所以直接調(diào)用 set 方法進(jìn)行配置覆蓋。
而 Zhiyi\Plus\Support\Configuration 類是封裝的自定義配置加載類,加載的配置文件存放在一個(gè) YAML 文件中,這個(gè)類實(shí)現(xiàn)了 自定義配置文件的加載和保存。這樣,我們從后臺(tái)調(diào)用 API 然后 constroller 調(diào)用這個(gè)類的 save 方法進(jìn)行持久化。

Zhiyi\Plus\Support\Configuration::getConfigurationBase

為什么要特殊說(shuō)一下這個(gè)方法?因?yàn)檫@個(gè)方法的特殊性,也是 depth merge 實(shí)現(xiàn)的重要函數(shù),在 Repository 中支持 app.name = value 這樣的形式進(jìn)行深曾鍵值賦值,利用這一個(gè)特性,這個(gè)函數(shù)將 多維數(shù)組轉(zhuǎn)換為一維。
效果:
怎么做到Laravel配置可以網(wǎng)站后臺(tái)配置

然后調(diào)用 app('config')->set($arr) 就對(duì) Laravel 的 config 進(jìn)行了 depth merge。
最后,持久化保存的 YAML 內(nèi)容如下:
怎么做到Laravel配置可以網(wǎng)站后臺(tái)配置

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

關(guān)于“怎么做到Laravel配置可以網(wǎng)站后臺(tái)配置”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,使各位可以學(xué)到更多知識(shí),如果覺得文章不錯(cuò),請(qǐng)把它分享出去讓更多的人看到。

文章標(biāo)題:怎么做到Laravel配置可以網(wǎng)站后臺(tái)配置
地址分享:http://chinadenli.net/article42/ihogec.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供用戶體驗(yàn)網(wǎng)站營(yíng)銷外貿(mào)建站微信公眾號(hào)域名注冊(cè)企業(yè)建站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都seo排名網(wǎng)站優(yōu)化