首頁 >php框架 >ThinkPHP >thinkphp中mvc代表什麼

thinkphp中mvc代表什麼

爱喝马黛茶的安东尼
爱喝马黛茶的安东尼原創
2019-08-22 10:24:363778瀏覽

thinkphp中mvc代表什麼

ThinkPHP基於MVC(Model-View-Controller,模型-視圖-控制器)模式,且皆支援多層(multi-Layer)設計。

模型(Model)層

預設的模型層由Model類別構成,但是隨著專案的增大和業務體系的複雜化,單一的模型層很難以解決要求,ThinkPHP支援多層Model,設計想法很簡單,不同的模型層仍然都繼承自系統的Model類,但是在目錄結構和命名規範上做了區分。

thinkphp中mvc代表什麼

相關推薦:《ThinkPHP教學

例如在某個專案設計中需要區分資料層、邏輯層、服務層等不同的模型層,我們可以在模組目錄下方建立Model、Logic和Service目錄,把對使用者表的所有模型操作分成三層:

1.資料層:Model/UserModel 用來定義資料相關的自動驗證與自動完成與資料存取介面

2.邏輯層:Logic/UserLogic 用於定義使用者相關的業務邏輯

3.服務層:Service/UserService 用於定義使用者相關的服務介面等

而這三個模型操作類別統一都會繼承Model類別即可,例如:

資料層:

Home/Model/UserModel.class.php
namespace Home\Model;
use Think\Model;
class UserModel extends Model{
}

邏輯層:

Home/Logic/UserLogic.class.php
namespace Home\Logic;
use Think\Model;
class UserLogic extends Model{
}

服務層:Home/Service/UserService.class.php

namespace Home\Service;
use Think\Model;
class UserService extends Model{
}

這樣區分不同的模型層之後對使用者資料的操作就非常清晰,在呼叫的時候,我們也可以用內建的D方法很方便的呼叫:

D(‘User‘) //实例化UserModel
D(‘User‘,‘Logic‘) //实例化UserLogic
D(‘User‘,‘Service‘) //实例化UserService

預設的模型層是Model,我們也可以更改設置,例如:

‘DEFAULT_M_LAYER‘       =>  ‘Logic‘, // 更改默认的模型层名称为Logic

更改之後,實例化的時候需要改成:

D(‘User‘) //实例化UserLogic
D(‘User‘,‘Model‘) //实例化UserModel
D(‘User‘,‘Service‘) //实例化UserService

對模型層的分層劃分是很靈活的,開發人員可以根據專案的需要自由定義和增加模型分層,你也完全可以只使用Model層。

視圖(View)層

視圖層由模板和模板引擎組成,在模板中可以直接使用PHP程式碼,模板引擎的設計會在後面講述,透過驅動也可以支援其他第三方的模板引擎。視圖的多層可以簡單的透過目錄(也就是模板主題)區分,例如:

View/default/User/add.html
View/blue/User/add.html

複雜一點的多層視圖還可以更進一步,採用不同的視圖目錄來完成,例如:

view 普通视图层目录
mobile 手机端访问视图层目录

這樣做的好處是每個不同的視圖層可以支援不同的模板主題功能。

預設的視圖層是View目錄,我們可以調整設定如下:

‘DEFAULT_V_LAYER‘       =>  ‘Mobile‘, // 默认的视图层名称更改为Mobile

非預設視圖層目錄的範本取得需要使用T函數,後面會講到。

控制器(Controller)層

ThinkPHP的控制器層由核心控制器和業務控制器組成,核心控制器由系統內部的App類別完成,負責應用(包括模組、控制器和操作)的調度控制,包括HTTP請求攔截和轉發、載入配置等。業務控制器則由使用者定義的控制器類別完成。多層業務控制器的實作原理和模型的分層類似,例如業務控制器和事件控制器:

Controller/UserController //用于用户的业务逻辑控制和调度
Event/UserEvent //用于用户的事件响应操作

存取控制器Home/Controller/UserController.class.php 定義如下:

namespace Home\Controller;
use Think\Controller;
class UserController extends Controller{
}

事件控制器Home/Event/UserEvent.class.php 定義如下:

namespace Home\Event;
use Think\Controller;
class UserEvent extends Controller{
}

thinkphp中mvc代表什麼UserController負責外部互動回應,透過URL要求回應,例如http://serverName/User/index,而UserEvent負責內部的事件回應,只能在內部呼叫:

A(‘User‘,‘Event‘);

預設的存取控制器層是Controller,我們可以調整設定如下:

‘DEFAULT_C_LAYER‘       =>  ‘Event‘, // 默认的控制器层名称改为Event

thinkphp中mvc代表什麼

##所以是和外部隔離的。

多層控制器的劃分也不是強制的,可以根據應用的需要自由分層。控制器分層裡面可以依需求呼叫分層模型,也可以呼叫不同的分層視圖(主題)。

在MVC三層中,ThinkPHP並不依賴M或V,甚至可以只有C或只有V,這個在ThinkPHP的設計裡面是一個很重要的使用者體驗設計,使用者只需要定義視圖,在沒有C的情況下也能自動辨識。

以上是thinkphp中mvc代表什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn