聊聊 Laravel 5.5 的 「自動發現」

ThinkSNS是什么?

ThinkSNS(簡稱TS),一款全平臺綜合性社交系統,目前最新版本為ThinkSNS+、ThinkSNS V4 ThinkSNS【簡】。

看了Taylor Otwell發表的Package Auto-Discovery In Laravel 5.5第一反應是"囧"

為啥。。。

也怪我,在開發之前忘記看5.5的開發代碼動態,之前的文章中也提到過,在ThinkSNS+開發場景中,我們不可能讓用戶去config/app.php修改配置,所以為了解決加載包的問題,我們開發了Laravel服務提供者的增強版可以看plus/doc/pakcage

是的,增強版的服務提供者,增加功能如下:

l可以友好的加載其他「服務提供者」(這在開發包的時候需要依賴其他laravel拓展包很有用)

l服務提供者轉到composer.json配置(無需修改配置了)

l針對包更友好的publish(Laravel的vendor:publish要求輸入服務提供者類,我們的只要求輸入包名稱)

l處理器,簡化版的命令行,可以用一個函數寫一個簡單的處理方法。

看到第二個就知道了,和laravel 5.5的自動發現類似,我們是在bootstrap/cache/providers.php中記錄服務提供者信息,而Laravel 5.5是在vendor目錄中查找后寫入到bootstrap/cache/package.php。

是的,我們的實現思路差不多,但我們支持更多功能。從這里讀取服務提供者列表,然后在Illuminate\Foundation\Application::registerConfiguredProviders函數中合并服務提供者,然后加載,從服務提供者中還可以繼續加載服務提供者。

說下我的心情,大概是這樣:又喜又悲~

開心,高興,Laravel更易用了,另一個心情;

惆悵,因為我在ThinkSNS+中開發了這一特性后,公司包幾乎都是以這種方式實現的。

你會說,把這些包配置字段設置下不就好了嘛?可是,在這種方式沒定型之前,已經修改過一次,難道一個多月后又要修改一次?慘不忍睹呀!!!我怕我會被揍,想想就有點痛。

今天在群里說這個話題,某開發者:“哈哈,我終于開發了畫中畫功能”,然后谷歌:“Android 8原生支持”。其實道理一樣的,并不是因為官方原生支持了不好,而是在糾結,用官方的?還是繼續維護自己的?自己的不一定有官方好,官方支持更穩定。

總結,我們覺得廢棄掉現在的安裝器(bootstrap/cache/providers.php是由Composer安裝器插件寫入的),然后增加一份代碼,從vendor目錄匹配出來,寫入到bootstrap/cache/package.php中去,只為5.5做準備。來吧!!!

開源代碼倉庫

GitHub:https://github.com/zhiyicx/thinksns-plus(點擊star,每日關注開發動態。)

免責聲明:本文僅代表文章作者的個人觀點,與本站無關。其原創性、真實性以及文中陳述文字和內容未經本站證實,請讀者僅作參考,并自行核實相關內容。如發現有害或侵權內容,請聯系郵箱:jubao@pinlue.com,我們將在第一時間進行核實處理。

http://image95.pinlue.com/image/50.jpg
分享
評論
首頁
暖暖高清在线观看视频桃花社区视频在线观看播放