摘要:本文分享下利用的達(dá)到網(wǎng)站后臺(tái)設(shè)置配置。當(dāng)加載配置執(zhí)行完成后就會(huì)執(zhí)行我注入的后置事件。官網(wǎng)內(nèi)測(cè)申請(qǐng)方式提供個(gè)人企業(yè)聯(lián)系方式及認(rèn)證信息實(shí)名企業(yè)營(yíng)業(yè)執(zhí)照照片或掃描件及申請(qǐng)說(shuō)明,發(fā)送郵件至將有機(jī)會(huì)獲得首批內(nèi)測(cè)資格,名額有限,申請(qǐng)從速。
本文分享下利用 Laravel 的 Bootstrapping 達(dá)到網(wǎng)站后臺(tái)設(shè)置 laravel 配置。
需求場(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),用戶安裝后可以不用修改配置文件的情況下鏡像配置。
如何覆蓋配置我們首先打開 IlluminateFoundationApplication::bootstrapWith 方法,代碼如下:
重點(diǎn)代碼在 $this["events"]->fire("bootstrapping: ".$bootstrapper, [$this]); 和 $this["events"]->fire("bootstrapped: ".$bootstrapper, [$this]); 上,很明顯是加載并運(yùn)行 bootstrapper 的前置和后置事件。
所以,我們看還有一個(gè)方法叫做 beforeBootstrapping 和 afterBootstrapping 然后怎么做呢?我們看
沒(méi)錯(cuò),這里是固定了順序的,我錯(cuò)誤的加載順序,會(huì)造成laravel的失敗,所以,我們選擇在之前繼承 IlluminateFoundationApplication 的應(yīng)用基礎(chǔ)上增加一個(gè)事件,代碼如下:
哪里添加的事件因?yàn)?ThinkSNS+ 是繼承了 IlluminateFoundationApplication 實(shí)現(xiàn)了新的 Application 類,所以我們直接在構(gòu)造方法里面增加了代碼。
這樣,當(dāng) Laravel 啟動(dòng),但是還沒(méi)有加載 bootstrapper 的時(shí)候,已經(jīng)把 加載配置的后置事件注入進(jìn)去了。當(dāng)加載配置執(zhí)行完成后就會(huì)執(zhí)行我注入的后置事件。
我們?cè)趧?chuàng)建了 ZhiyiPlusBootstrapLoadConfiguration 這樣一個(gè)類,注冊(cè)為后置事件,路徑為: /app/Bootstrap/LoadConfiguration.php ,然后實(shí)現(xiàn)代碼如下:
很簡(jiǎn)單,因?yàn)?app("config") 是一個(gè) IlluminateContractsConfigRepository 接口的實(shí)例,所以直接調(diào)用 set 方法進(jìn)行配置覆蓋。
而 ZhiyiPlusSupportConfiguration 類是封裝的自定義配置加載類,加載的配置文件存放在一個(gè) YAML 文件中,這個(gè)類實(shí)現(xiàn)了 自定義配置文件的加載和保存。這樣,我們從后臺(tái)調(diào)用 API 然后 constroller 調(diào)用這個(gè)類的 save 方法進(jìn)行持久化。
為什么要特殊說(shuō)一下這個(gè)方法?因?yàn)檫@個(gè)方法的特殊性,也是 depth merge 實(shí)現(xiàn)的重要函數(shù),在 Repository 中支持 app.name = value 這樣的形式進(jìn)行深曾鍵值賦值,利用這一個(gè)特性,這個(gè)函數(shù)將 多維數(shù)組轉(zhuǎn)換為一維。
效果:
然后調(diào)用 app("config")->set($arr) 就對(duì) Laravel 的 config 進(jìn)行了 depth merge。
最后,持久化保存的 YAML 內(nèi)容如下:
所以,基于 depth merge 在 .plus.yml 配置中,只需要保存部分配置,即可不想配置結(jié)構(gòu)的完整性的情況下對(duì) Laravel 鏡像配置合并。
開源代碼倉(cāng)庫(kù)GitHub:https://github.com/zhiyicx/th...(點(diǎn)擊star,每日關(guān)注開發(fā)動(dòng)態(tài)。)
ThinkSNS官網(wǎng):http://www.thinksns.com/
內(nèi)測(cè)申請(qǐng)方式提供個(gè)人/企業(yè)聯(lián)系方式及認(rèn)證信息(實(shí)名ID /企業(yè)營(yíng)業(yè)執(zhí)照照片或掃描件)及申請(qǐng)說(shuō)明,發(fā)送郵件至[email protected]將有機(jī)會(huì)獲得首批內(nèi)測(cè)資格,名額有限,申請(qǐng)從速。
參與內(nèi)測(cè)請(qǐng)?zhí)峁┮韵沦Y料
1個(gè)可接收驗(yàn)證碼的手機(jī)號(hào);1個(gè)指定郵箱;1位測(cè)試人員姓名;1個(gè)您喜歡的賬號(hào)昵稱
開源不易,為了爭(zhēng)取開源,我們團(tuán)隊(duì)做了很多努力。把基于Laravel的作品展示在大家面前,之后專欄會(huì)持續(xù)不斷的分享ThinkSNS +開發(fā)過(guò)程中的技術(shù)細(xì)節(jié)。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/23082.html
摘要:今天,我們不聊技術(shù),我們從技術(shù)結(jié)構(gòu)方面,聊一聊本次發(fā)布的版本,有些什么功能。終于,通過(guò)團(tuán)隊(duì)的不斷努力,我們發(fā)布了第一個(gè)版本。所以當(dāng)前最新版本是版本。拓展包安裝器入口我們也是采用的服務(wù)提供者,但是簡(jiǎn)化了讓用戶去修改配置的流程,之后即可使用。 今天,我們不聊技術(shù),我們從技術(shù)結(jié)構(gòu)方面,聊一聊本次發(fā)布的版本,有些什么功能。 其實(shí),alpha.1 早上打的 tag ,晚上因?yàn)樵黾恿藘蓚€(gè)核心功能,...
摘要:需求場(chǎng)景發(fā)送驗(yàn)證碼或者消息通知,可發(fā)送到手機(jī)或郵箱中。完成首先,在中的規(guī)范就是使用的消息通知,這里基于場(chǎng)景為驗(yàn)證碼。所以我們?cè)隍?yàn)證碼模型中添加是完全符合通知的正確使用的。 順便發(fā)個(gè)小通知:7月15日ThinkSNS+開源版發(fā)布,同時(shí)非開源的APP也走出內(nèi)測(cè)階段,體驗(yàn)二維碼也全面發(fā)布體驗(yàn)。 什么是ThinkSNS ? ThinkSNS(簡(jiǎn)稱TS),一款全平臺(tái)綜合性社交系統(tǒng),為國(guó)內(nèi)外大中小...
摘要:在社交系統(tǒng)中有這樣一個(gè)命令主要是用作包的安裝,升級(jí),卸載。這在開發(fā)過(guò)程中很有用。內(nèi)測(cè)申請(qǐng)方式提供個(gè)人企業(yè)聯(lián)系方式及認(rèn)證信息實(shí)名企業(yè)營(yíng)業(yè)執(zhí)照照片或掃描件及申請(qǐng)說(shuō)明,發(fā)送郵件至將有機(jī)會(huì)獲得首批內(nèi)測(cè)資格,名額有限,申請(qǐng)從速。 在前面,我介紹了拓展類型,分別有 plus-compnent 和 plus-plugin 兩個(gè),這里重點(diǎn)講以下如何實(shí)現(xiàn) plus-component 的。 plus-c...
閱讀 1773·2021-10-11 10:59
閱讀 2420·2021-09-30 09:53
閱讀 1782·2021-09-22 15:28
閱讀 2810·2019-08-29 15:29
閱讀 1572·2019-08-29 13:53
閱讀 3219·2019-08-29 12:34
閱讀 2868·2019-08-26 10:16
閱讀 2676·2019-08-23 15:16