成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Laravel Model 利用 Macroable 為數(shù)據(jù)模型添加宏能力

zhangfaliang / 1231人閱讀

摘要:利用當(dāng)前類沒有這個函數(shù)的時候執(zhí)行這個函數(shù)名注冊的回調(diào)。使用有了這個那么我們添加到模型中,就可以使用宏能力為其動態(tài)添加函數(shù)了這樣,我們可以直接拿到用戶發(fā)布的所有問題了。

【摘要】簡單的說一下宏能力,這個類是 IlluminateSupportTraitsMacroable 其中利用重載實(shí)現(xiàn)了可以定義宏的功能,即通過 macro 靜態(tài)方法添加回調(diào),并定義一個名字。利用 __call 當(dāng)前類沒有這個函數(shù)的時候執(zhí)行這個函數(shù)名注冊的回調(diào)。

產(chǎn)生需求

在使用 Laravel 開發(fā) ThinkSNS Plus 的時候,因?yàn)楹芏喙δ軌K都沒有寫在一個庫里面,利用拓展包的形式添加實(shí)際功能,里面很多地方也用到了“多態(tài)多對多”的關(guān)系。問題來了,開發(fā)一個問答程序,想要給用戶模型增加發(fā)布的問題或者回答的關(guān)系,起初是繼承一份 User 模型,添加了關(guān)系,之后就發(fā)現(xiàn)問題了,因?yàn)橛脩舻?tag 是使用多態(tài)多對多的關(guān)系,我通過繼承的用戶模型是無法拿到這種關(guān)系數(shù)據(jù)的因?yàn)?*able_type 是 user 數(shù)據(jù)模型類名稱或者別名。而我繼承之后類也就發(fā)生改變了。

完成需求

隨之想到,在 Laravel 中有一個 Trait 叫做 Macroable 然后發(fā)現(xiàn) Builder 都有這種能力,而 Model 沒有,隨之也將這個 Trait 添加到要使用的model上,后來發(fā)現(xiàn),如果其他模型也要用是不是也要再添加一次?隨之寫了一份 Trait :


只要在要使用的 model 中 use 即可。

使用

有了這個 Trait 那么我們添加到 User 模型中,就可以使用宏能力為其動態(tài)添加函數(shù)了:

這樣,我們可以直接 :

拿到用戶發(fā)布的所有問題了。

以上代碼都來自于ThinkSNS Plus,看完整的開發(fā)代碼可以看倉庫:

GitHub: https://github.com/slimkit/th...(開源不易,求 Star )

ThinkSNS官網(wǎng):http://thinksns.com/

開源版源碼官方正版獲取唯一渠道:關(guān)注公眾號“thinksns”,回復(fù)“開源版”即可獲得最新源碼壓縮文件地址。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/25717.html

相關(guān)文章

  • Laravel 中簡約而不簡單的 Macroable 指令

    摘要:方法這個方法就比較簡單沒什么復(fù)雜可言,就判斷是否存在宏指令。通常是使用宏指令之前判斷一下。中對類增加宏指令中很多類都使用了宏這個比如,我們想為這個類增加一個方法,但不會動到里面的代碼。 百度百科的定義:計(jì)算機(jī)科學(xué)里的宏(Macro),是一種批量處理的稱謂。一般說來,宏是一種規(guī)則或模式,或稱語法替換 ,用于說明某一特定輸入(通常是字符串)如何根據(jù)預(yù)定義的規(guī)則轉(zhuǎn)換成對應(yīng)的輸出(通常也是字符...

    itvincent 評論0 收藏0
  • Laravel 5.7 最佳實(shí)踐和開發(fā)技巧分享

    摘要:當(dāng)查詢數(shù)據(jù)時,本地范圍允許我們創(chuàng)建自己的查詢構(gòu)造器鏈?zhǔn)椒椒ā_@樣便會知道這是一個本地范圍并且可以在查詢構(gòu)造器中使用。某些查詢構(gòu)造器不可用或者說可用但是方法名不同,關(guān)于這些請查閱所有集合的方法。 showImg(https://segmentfault.com/img/remote/1460000017877956?w=800&h=267); Laravel 因可編寫出干凈,可用可調(diào)試的...

    ninefive 評論0 收藏0
  • Laravel 工具包推薦--角色/權(quán)限管理】

    摘要:在大多數(shù)的開發(fā)中,角色和權(quán)限的管理都是非常重要的一部分。上關(guān)于角色和權(quán)限管理的包有很多,今天就為大家介紹幾個好用的包。緩存在中,為了提高應(yīng)用的性能,或自動的存儲角色和權(quán)限數(shù)據(jù)。 showImg(https://segmentfault.com/img/bVTEb3?w=2200&h=1125); 在大多數(shù)的web開發(fā)中,角色和權(quán)限的管理都是非常重要的一部分。Laravel上關(guān)于角色和權(quán)...

    xiaoxiaozi 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<