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目錄,把對使用者表的所有模型操...