在thinkphp5中,MVC分層指的是模型層、視圖層和控制器層分工合作,邏輯層和表現(xiàn)層進行分開的操作;模型層負責(zé)數(shù)據(jù)庫操作,控制器就是一個模塊類,根據(jù)url進行調(diào)度和操作,視圖用于連接action控制器和模板文件。
本文操作環(huán)境:Windows10系統(tǒng)、ThinkPHP5版、Dell G3電腦。
thinkphp5中MVC分層是什么
MVC,M模型,V視圖,C控制器。
分層,就是分工合作,邏輯層和表現(xiàn)層進行分開的操作。模型負責(zé):數(shù)據(jù)庫操作。控制器:任何一個WEB操作都是一個模塊的某個操作,控制器就是一個模塊類,根據(jù)url進行調(diào)度和操作。視圖(view類和模版文件組成):連接action控制器和模版文件,Action類把數(shù)據(jù)通過View類傳遞到模板文件,而模板文件把接收到的數(shù)據(jù)轉(zhuǎn)換成相應(yīng)的數(shù)據(jù)格式顯示。
ThinkPHP基于MVC(Model-View-Controller,模型-視圖-控制器)模式,并且均支持多層(multi-Layer)設(shè)計。
立即學(xué)習(xí)“PHP免費學(xué)習(xí)筆記(深入)”;
模型(Model)層
默認的模型層由Model類構(gòu)成,但是隨著項目的增大和業(yè)務(wù)體系的復(fù)雜化,單一的模型層很難解決要求,多層Model的支持設(shè)計思路很簡單,不同的模型層仍然都繼承自系統(tǒng)的Model類,但是在目錄結(jié)構(gòu)和命名規(guī)范上做了區(qū)分。
例如在某個項目設(shè)計中需要區(qū)分數(shù)據(jù)層、邏輯層、服務(wù)層等不同的模型層,我們可以在模塊目錄下面創(chuàng)建model、logic和service目錄,把對用戶表的所有模型操作分成三層:
數(shù)據(jù)層:model/User?用于定義數(shù)據(jù)相關(guān)的自動驗證和自動完成和數(shù)據(jù)存取接口
邏輯層:logic/User?用于定義用戶相關(guān)的業(yè)務(wù)邏輯
服務(wù)層:service/User?用于定義用戶相關(guān)的服務(wù)接口等
而這三個模型操作類統(tǒng)一都繼承thinkModel類即可。
對模型層的分層劃分是很靈活的,開發(fā)人員可以根據(jù)項目的需要自由定義和增加模型分層,你也完全可以只使用Model層。
視圖(View)層
視圖層由模板和模板引擎組成,在模板中可以直接使用PHP代碼,模板引擎的設(shè)計會在后面講述,通過驅(qū)動也可以支持其他第三方的模板引擎。視圖的多層可以簡單的通過目錄區(qū)分,例如:
view/default/user/add.html view/blue/user/add.html
復(fù)雜一點的多層視圖還可以更進一步,采用不同的視圖目錄來完成,例如:
view?普通視圖層目錄
mobile?手機端訪問視圖層目錄
控制器(Controller)層
ThinkPHP的控制器層由核心控制器和業(yè)務(wù)控制器組成,核心控制器由系統(tǒng)內(nèi)部的App類完成,負責(zé)應(yīng)用(包括模塊、控制器和操作)的調(diào)度控制,包括HTTP請求攔截和轉(zhuǎn)發(fā)、加載配置等。業(yè)務(wù)控制器則由用戶定義的控制器類完成。多層業(yè)務(wù)控制器的實現(xiàn)原理和模型的分層類似,例如業(yè)務(wù)控制器和事件控制器:
controller/User?//用于用戶的業(yè)務(wù)邏輯控制和調(diào)度 event/User?//用于用戶的事件響應(yīng)操作
controllerUser負責(zé)外部交互響應(yīng),通過URL請求響應(yīng),例如?http://serverName/User/index,而?eventUser?負責(zé)內(nèi)部的事件響應(yīng),并且只能在內(nèi)部調(diào)用,所以是和外部隔離的。多層控制器的劃分也不是強制的,可以根據(jù)應(yīng)用的需要自由分層。控制器分層里面可以根據(jù)需要調(diào)用分層模型,也可以調(diào)用不同的分層視圖。
推薦學(xué)習(xí):《PHP視頻教程》