摘要:利用當前類沒有這個函數的時候執行這個函數名注冊的回調。使用有了這個那么我們添加到模型中,就可以使用宏能力為其動態添加函數了這樣,我們可以直接拿到用戶發布的所有問題了。
【摘要】簡單的說一下宏能力,這個類是 IlluminateSupportTraitsMacroable 其中利用重載實現了可以定義宏的功能,即通過 macro 靜態方法添加回調,并定義一個名字。利用 __call 當前類沒有這個函數的時候執行這個函數名注冊的回調。
產生需求
在使用 Laravel 開發 ThinkSNS Plus 的時候,因為很多功能塊都沒有寫在一個庫里面,利用拓展包的形式添加實際功能,里面很多地方也用到了“多態多對多”的關系。問題來了,開發一個問答程序,想要給用戶模型增加發布的問題或者回答的關系,起初是繼承一份 User 模型,添加了關系,之后就發現問題了,因為用戶的 tag 是使用多態多對多的關系,我通過繼承的用戶模型是無法拿到這種關系數據的因為 *able_type 是 user 數據模型類名稱或者別名。而我繼承之后類也就發生改變了。
完成需求
隨之想到,在 Laravel 中有一個 Trait 叫做 Macroable 然后發現 Builder 都有這種能力,而 Model 沒有,隨之也將這個 Trait 添加到要使用的model上,后來發現,如果其他模型也要用是不是也要再添加一次?隨之寫了一份 Trait :
只要在要使用的 model 中 use 即可。
使用
有了這個 Trait 那么我們添加到 User 模型中,就可以使用宏能力為其動態添加函數了:
這樣,我們可以直接 :
拿到用戶發布的所有問題了。
以上代碼都來自于ThinkSNS Plus,看完整的開發代碼可以看倉庫:
GitHub: https://github.com/slimkit/th...(開源不易,求 Star )
ThinkSNS官網:http://thinksns.com/
開源版源碼官方正版獲取唯一渠道:關注公眾號“thinksns”,回復“開源版”即可獲得最新源碼壓縮文件地址。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/25717.html
摘要:方法這個方法就比較簡單沒什么復雜可言,就判斷是否存在宏指令。通常是使用宏指令之前判斷一下。中對類增加宏指令中很多類都使用了宏這個比如,我們想為這個類增加一個方法,但不會動到里面的代碼。 百度百科的定義:計算機科學里的宏(Macro),是一種批量處理的稱謂。一般說來,宏是一種規則或模式,或稱語法替換 ,用于說明某一特定輸入(通常是字符串)如何根據預定義的規則轉換成對應的輸出(通常也是字符...
摘要:當查詢數據時,本地范圍允許我們創建自己的查詢構造器鏈式方法。這樣便會知道這是一個本地范圍并且可以在查詢構造器中使用。某些查詢構造器不可用或者說可用但是方法名不同,關于這些請查閱所有集合的方法。 showImg(https://segmentfault.com/img/remote/1460000017877956?w=800&h=267); Laravel 因可編寫出干凈,可用可調試的...
摘要:在大多數的開發中,角色和權限的管理都是非常重要的一部分。上關于角色和權限管理的包有很多,今天就為大家介紹幾個好用的包。緩存在中,為了提高應用的性能,或自動的存儲角色和權限數據。 showImg(https://segmentfault.com/img/bVTEb3?w=2200&h=1125); 在大多數的web開發中,角色和權限的管理都是非常重要的一部分。Laravel上關于角色和權...
閱讀 2732·2021-11-22 13:54
閱讀 1069·2021-10-14 09:48
閱讀 2295·2021-09-08 09:35
閱讀 1559·2019-08-30 15:53
閱讀 1172·2019-08-30 13:14
閱讀 610·2019-08-30 13:09
閱讀 2527·2019-08-30 10:57
閱讀 3341·2019-08-29 13:18