thinkphp學習筆記7 多層MVC

2022-02-11 05:18:13 字數 3045 閱讀 5746

thinkphp支援多層設計。

1.模型層model

使用多層目錄結構和命名規範來設計多層的model,例如在專案設計中如果需要區分資料層,邏輯層,服務層等不同的模型層可以在模組目錄下建立model,logic,service目錄,把對使用者表的所有模型操作分成3層。

1.model/usermodel用於定義資料相關的自動驗證,自動完成和資料訪問介面

2.logic/userlogical用於定義使用者相關的業務邏輯

3.service/userservice用於定於使用者相關的服務介面

這三個模型都繼承model類即可例如資料層home/model/usermodel.class.php

namespace home\model;

usethink\model;

class usermodel extends model{}

邏輯層home/logic/userlogical.class.php

namespace home\logic;

usethink\model;

class userlogic extends model{}

服務層home/service/userservice.class.php

namespace home\service;

usethink\model;

class userservice extends model{}

在呼叫的時候可以使用內建的d方法或m方法經行呼叫

d('user') //

例項化usermodel

d('user','logic') //

例項化userlogic

d('user','service') //

例項化userservice

呼叫預設的模型層model下的資料訪問介面類的時候沒有第二個引數模型檔名稱,預設的模型層是model,也可以更改設定如下:

'default_m_layer'       =>  'logic', //

更改預設的模型層名稱為logic

這樣的話例項化方法就需要相應的修改了

d('user') //

例項化userlogic

d('user','model') //

例項化usermodel

d('user','service') //

例項化userservice

可以看到使用d('user')預設情況下會去例項化userlogice類了,這個是很靈活的,如果我們資料驗證,自動完成是在js裡面完成的,而取資料是從service介面中完成的,這樣完全可以只要乙個service層,其他的層就不需要了。

2.檢視層view

檢視層由模板和模板引擎組成,常見的第三方模板是.tpl,可以直接在模板中使用php**,檢視的多層可以簡單的使用目錄(模板主題)來區分,例如:

複雜一點的多層檢視還可以使用不同的檢視目錄來區分例如:

view 普通檢視層目錄

mobile 手機端訪問檢視層目錄

這樣不同的模板可以使用不同的頁面風格,還可以預設檢視目錄,如下:

'default_v_layer'       =>  'mobile', //

預設的檢視層名稱更改為mobile

3.控制器層controller

thinkphp的控制器有兩種類別,一種是核心控制器,一種是業務控制器,核心控制器在thinkphp目錄下,例如thinkphp\thinkphp\library\think\controller\hprosecontroller.class.php,負責應用的排程控制,包括http請求的攔截,**,載入配置等。我們這裡要討論的是業務控制器,由使用者自己定義的控制器類完成,多層業務控制器的實現原理和模型的分層類似,例如業務控制器和事件控制器,

controller/usercontroller //

用於使用者的業務邏輯控制和排程

event/userevent //

用於使用者的事件響應操作

事件這個還沒有用過,看上去很高上大,web開發中的使用者事件很少,大多數在js中完成。

訪問控制器home/controller/usercontroller.class.php定義如下:

namespace home\controller;

usethink\controller;

class usercontroller extends

controller

事件控制器home/event/userevent.class.php的定義如下:

namespace home\event;

usethink\controller;

class userevent extends

controller

usercontrlller負責外部互動響應,通過url請求響應,例如http://servername/user/index,userevent負責內部事件響應並且只能在內部呼叫a('user','event');同樣我們可以設定預設的控制器層:

'default_c_layer'       =>  'event', //

預設的控制器層名稱改為event

內部和外部是隔離的,多層控制器也不是強制的,可以根據應用的需要自由的分層,控制器裡可以根據需要呼叫不同的分層模型,也可以顯示不同的分層檢視,實現不同的主題。

在mvc的三層中,thinkphp並不依賴m和v,可以只有c或者只有v,使用者只需要定義檢視,在沒有c的情況下也能自動識別,但是這種怪異的寫法會讓很多剛剛入門的程式設計師非常的迷惑。

多層設計在目前的專案中還沒有用到,在.net專案中倒見到很多,下次用到再做補充。

thinkphp學習筆記7 多層MVC

原文 thinkphp學習筆記7 多層mvc thinkphp支援多層設計。1.模型層model 使用多層目錄結構和命名規範來設計多層的model,例如在專案設計中如果需要區分資料層,邏輯層,服務層等不同的模型層可以在模組目錄下建立model,logic,service目錄,把對使用者表的所有模型操...

thinkphp學習筆記7 多層MVC

原文 thinkphp學習筆記7 多層mvc thinkphp支援多層設計。1.模型層model 使用多層目錄結構和命名規範來設計多層的model,例如在專案設計中如果需要區分資料層,邏輯層,服務層等不同的模型層可以在模組目錄下建立model,logic,service目錄,把對使用者表的所有模型操...

thinkphp學習筆記7 多層MVC

原文 thinkphp學習筆記7 多層mvc thinkphp支援多層設計。1.模型層model 使用多層目錄結構和命名規範來設計多層的model,例如在專案設計中如果需要區分資料層,邏輯層,服務層等不同的模型層可以在模組目錄下建立model,logic,service目錄,把對使用者表的所有模型操...