鍍金池/ 問(wèn)答/PHP  網(wǎng)絡(luò)安全/ thinkphp 同一個(gè)控制器里面的多個(gè)方法有共同部分,應(yīng)該怎樣提取出來(lái)

thinkphp 同一個(gè)控制器里面的多個(gè)方法有共同部分,應(yīng)該怎樣提取出來(lái)

clipboard.png

clipboard.png
這些方法都有一些相同的代碼,應(yīng)該放在哪里,然后才能引用,admin控制器嗎?怎么引用呢

回答
編輯回答
掛念你

1樓提供的方法確實(shí)是一種解決方案。適合不同控制器中重復(fù)代碼是一個(gè)功能性的內(nèi)容,比如從第一行執(zhí)行到共同部分最后一行只想得到一個(gè)結(jié)果的場(chǎng)景,如果不是功能性的內(nèi)容,重復(fù)部分代碼執(zhí)行過(guò)程中的數(shù)據(jù)都需要用到,那么用1樓的方法需要返回重復(fù)部分代碼執(zhí)行過(guò)程中的所有數(shù)據(jù)。不知道這樣說(shuō)理解不。

另外一個(gè)方法是TP本身就有前置加載,重復(fù)部分的內(nèi)容也可以通過(guò)前置加載的方法去用。

第三種方法控制器繼承。

反正這種問(wèn)題解決方法不一而足,根據(jù)自己習(xí)慣去做就好。

2018年5月21日 20:08
編輯回答
舊時(shí)光

service最佳,目前想解決就放到admin_controller

2017年5月31日 15:52
編輯回答
小曖昧

傳統(tǒng)的mvc三層邏輯有很大的局限性,就是一些邏輯,特別是數(shù)據(jù)處理部分放到控制層和模型層都不合適。所以我一般就如 @xialeistudio 所言,再加一個(gè)server層,用來(lái)處理數(shù)據(jù)、通用邏輯等

現(xiàn)在的主流web項(xiàng)目基本也是這樣

2017年8月13日 20:15
編輯回答
執(zhí)念

其實(shí)很多種方法啦,主要是把這塊代碼單獨(dú)抽出來(lái),比如可以在common的function文件里定義一個(gè)方法,然后把這塊代碼丟進(jìn)去。一般公共用到的都可以封裝成一個(gè)函數(shù)放在function。減少代碼的冗余!也可以建一個(gè)Logic層,放到Logic文件里。在控制器需要用到的時(shí)候直接調(diào)用就可以了。

2017年11月16日 23:40
編輯回答
怣痛

可以創(chuàng)建一個(gè)Logic層,里面只放邏輯部分。

2018年3月10日 22:25
編輯回答
敢試

在model層和controller層之間加上一個(gè)service層唄!復(fù)用操作數(shù)據(jù)庫(kù)的方法!

2017年7月2日 12:05
編輯回答
祉小皓

建議加一個(gè)數(shù)據(jù)調(diào)度和業(yè)務(wù)邏輯處理的server層,全部扔在controller后期維護(hù)起來(lái)很麻煩。

2017年7月21日 03:13
編輯回答
拽很帥

建議抽取一個(gè)Service層專注業(yè)務(wù)邏輯。不牽扯任何controller,需要的時(shí)候直接調(diào)用即可

2018年8月5日 09:03
編輯回答
薄荷綠

獨(dú)立出來(lái)寫一個(gè)方法啰

2017年6月1日 14:41
編輯回答
櫻花霓

重復(fù)的代碼可以考慮封裝成一個(gè)函數(shù)然后去調(diào)用

2017年5月16日 06:51