ThinkPHP3.1新特性之多層MVC的支持
1.模型(Model)層:默認(rèn)的模型層由Model類(lèi)構(gòu)成,但是隨著項(xiàng)目的增大和業(yè)務(wù)體系的復(fù)雜化,單一的模型層很難解決要求,從3.1開(kāi)始推出了多層Model的支持,設(shè)計(jì)思路很簡(jiǎn)單,不同的模型層仍然都繼承自系統(tǒng)的Model類(lèi),但是在目錄結(jié)構(gòu)和命名規(guī)范上做了區(qū)分,例如在某個(gè)項(xiàng)目設(shè)計(jì)中需要區(qū)分?jǐn)?shù)據(jù)層、邏輯層、服務(wù)層等不同的模型層,我們可以在項(xiàng)目的Lib目錄下面創(chuàng)建Model、Logic和Service目錄,把對(duì)用戶(hù)表的所有模型操作分成三層:
數(shù)據(jù)層:Model/UserModel 用于定義數(shù)據(jù)相關(guān)的自動(dòng)驗(yàn)證和自動(dòng)完成和數(shù)據(jù)存取接口
邏輯層:Logic/UserLogic 用于定義用戶(hù)相關(guān)的業(yè)務(wù)邏輯
服務(wù)層:Service/UserService 用于定義用戶(hù)相關(guān)的服務(wù)接口等
而這三個(gè)模型操作類(lèi)統(tǒng)一都繼承Model類(lèi)即可,這樣對(duì)用戶(hù)數(shù)據(jù)的操作就非常清晰,在調(diào)用的時(shí)候,也可以用內(nèi)置的D方法很方便的調(diào)用:
D('User') //實(shí)例化UserModel
D('User','Logic') //實(shí)例化UserLogic
D('User','Service') //實(shí)例化UserService
對(duì)模型層的分層劃分是很靈活的,開(kāi)發(fā)人員可以根據(jù)項(xiàng)目的需要自由定義分層。
2.視圖(View)層:由模板和模板引擎組成,在模板中可以直接使用PHP代碼,模板引擎的設(shè)計(jì)會(huì)在后面講述,通過(guò)驅(qū)動(dòng)也可以支持其他第三方的模板引擎。視圖的多層可以簡(jiǎn)單的通過(guò)目錄區(qū)分,例如:
Tpl/default/User/add.html Tpl/blue/User/add.html
3.控制器(Controller)層:ThinkPHP的控制器層由核心控制器和業(yè)務(wù)控制器組成,核心控制器由系統(tǒng)內(nèi)部的App類(lèi)完成,負(fù)責(zé)應(yīng)用(包括模塊和操作)的調(diào)度控制,包括HTTP請(qǐng)求攔截和轉(zhuǎn)發(fā)、加載配置等,業(yè)務(wù)控制器則由用戶(hù)定義的Action類(lèi)完成。3.1版本開(kāi)始增加了多層業(yè)務(wù)控制器的支持。其實(shí)現(xiàn)原理和模型的分層類(lèi)似,例如業(yè)務(wù)控制器和事件控制器:
Action/UserAction //用于用戶(hù)的業(yè)務(wù)邏輯控制和調(diào)度 Event/UserEvent //用于用戶(hù)的事件響應(yīng)操作
UserAction負(fù)責(zé)外部交互響應(yīng),通過(guò)URL請(qǐng)求響應(yīng),例如 http://serverName/User/index,而UserEvent 負(fù)責(zé)內(nèi)部的事件響應(yīng),并且只能在內(nèi)部調(diào)用
A('User','Event');
所以是和外部隔離的。多層控制器的劃分也不是強(qiáng)制的,可以根據(jù)項(xiàng)目的需要自由分層??刂破鞣謱永锩婵梢愿鶕?jù)需要調(diào)用分層模型,也可以調(diào)用不同的目錄的視圖模板。
同時(shí),R方法也可以支持多層控制器的調(diào)用了,增加了第三個(gè)參數(shù)表示控制器的層名稱(chēng),例如:
R('User/register',array(15),'Event');
表示調(diào)用UserEvent控制器的register方法,并傳入?yún)?shù)15.
在MVC三層中,ThinkPHP并不依賴(lài)M或者V,甚至可以只有C或者只有V,這個(gè)在ThinkPHP的設(shè)計(jì)里面是一個(gè)很重要的用戶(hù)體驗(yàn)設(shè)計(jì),用戶(hù)只需要定義視圖,在沒(méi)有C的情況下也能自動(dòng)識(shí)別。
相關(guān)文章
Laravel框架實(shí)現(xiàn)定時(shí)Task Scheduling例子
今天小編就為大家分享一篇Laravel框架實(shí)現(xiàn)定時(shí)Task Scheduling例子,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-10-10
純PHP生成的一個(gè)樹(shù)葉圖片畫(huà)圖例子
這篇文章主要介紹了純PHP生成的一個(gè)樹(shù)葉圖片畫(huà)圖例子,希望可以帶給使用PHP進(jìn)行圖像編程的朋友一些幫助。2014-04-04
php兩個(gè)多維數(shù)組組合遍歷的實(shí)例
下面小編就為大家?guī)?lái)一篇php兩個(gè)多維數(shù)組組合遍歷的實(shí)例。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-10-10
THINKPHP3.2使用soap連接webservice的解決方法
這篇文章主要為大家詳細(xì)介紹了THINKPHP3.2使用soap連接webservice的解決方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-12-12
一個(gè)簡(jiǎn)單安全的PHP驗(yàn)證碼類(lèi)、PHP驗(yàn)證碼
這篇文章主要介紹了一個(gè)簡(jiǎn)單安全的PHP驗(yàn)證碼類(lèi) PHP驗(yàn)證碼的相關(guān)資料,需要的朋友可以參考下2016-09-09
thinkphp中ajax與php響應(yīng)過(guò)程詳解
這篇文章主要介紹了thinkphp中ajax與php響應(yīng)過(guò)程,以實(shí)例形式詳細(xì)分析了ThinkPHP框架中Ajax響應(yīng)方式的處理原理及實(shí)現(xiàn)過(guò)程,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2014-12-12
ThinkPHP利用PHPMailer實(shí)現(xiàn)郵件發(fā)送實(shí)現(xiàn)代碼
本文章介紹了關(guān)于在thinkphp中利用了phpmailer來(lái)實(shí)現(xiàn)郵件發(fā)送的詳細(xì)教程,有需要的朋友可以參考一下2013-09-09

