thinkphp基於mvc(model-view-controller,模型-檢視-控制器)模式,不過均支援多層(multi-layer)設計。
模型(model)層:預設的模型層由model類構成,但是隨著專案的增大和業務體系的複雜化,單一的模型層很難解決要求,從3.1開始推出了多層model的支援,設計思路很簡單,不同的模型層仍然都繼承自系統的model類,但是在目錄結構和命名規範上做了區分,例如在某個專案設計中需要區分資料層、邏輯層、服務層等不同的模型層,我們可以在專案的lib目錄下面建立model、logic和service目錄,把對使用者表的所有模型操作分成三層:
資料層:model/usermodel 用於定義資料相關的自動驗證和自動完成和資料訪問介面
邏輯層:logic/userlogic 用於定義使用者相關的業務邏輯
服務層:service/userservice 用於定義使用者相關的服務介面等
而這三個模型操作類統一都繼承model類即可,這樣對使用者資料的操作就非常清晰,在呼叫的時候,也可以用內建的d方法很方便的呼叫:
d('user') //例項化usermodel
d('user','logic') //
例項化userlogic
d('user','service') //
例項化userservice
對模型層的分層劃分是很靈活的,開發人員可以根據專案的需要自由定義分層。
檢視(view)層:由模板和模板引擎組成,在模板中可以直接使用php**,模板引擎的設計會在後面講述,通過驅動也可以支援其他第三方的模板引擎。檢視的多層可以簡單的通過目錄區分,例如:
tpl/default/user/add.htmltpl/blue/user/add.html
action/useraction //用於使用者的業務邏輯控制和排程
event/userevent //
用於使用者的事件響應操作
useraction負責外部互動響應,通過url請求響應,例如 http://servername/user/index,而userevent 負責內部的事件響應,並且只能在內部呼叫
a('user','event');
所以是和外部隔離的。多層控制器的劃分也不是強制的,可以根據專案的需要自由分層。控制器分層裡面可以根據需要呼叫分層模型,也可以呼叫不同的目錄的檢視模板。
同時,r方法也可以支援多層控制器的呼叫了,增加了第三個引數表示控制器的層名稱,例如:
r('user/register',array(15),'event');
表示呼叫userevent控制器的register方法,並傳入引數15.
在mvc三層中,thinkphp並不依賴m或者v,甚至可以只有c或者只有v,這個在thinkphp的設計裡面是乙個很重要的使用者體驗設計,使用者只需要定義檢視,在沒有c的情況下也能自動識別。
ThinkPHP3 1新特性 Action引數繫結
action引數繫結功能提供了url變數和操作方法的引數繫結支援,這一功能可以使得你的操作方法定義和引數獲取更加清晰,也便於跨模組呼叫操作方法了。這一新特性對以往的操作方法使用沒有任何影響,你也可以用新的方式來改造以往的操作方法定義。action引數繫結的原理是把url中的引數 不包括分組 模組和操...
ThinkPHP3 1新特性 內容解析輸出
thinkphp中頁面輸出的過程是讀取模板檔案,然後進行模板解析 也支援呼叫第三方模板引擎解析 但是有一些情況,我們並沒有定義模板檔案,或者把模板檔案儲存在資料庫裡面,那麼這個時候進行頁面輸出的時候,我們是無法進行模板檔案讀取的,3.1版本則針對這樣的情況增加了內容解析輸出的功能。內建的模板引擎也進...
ThinkPHP3 1新特性 頁面壓縮輸出支援
現在大多數瀏覽器都已經支援頁面的壓縮輸出,通過壓縮輸出,頁面大小可以減少30 由於3.0版本沒有內建頁面壓縮輸出功能,所以一般來說,需要自己在入口檔案中新增 ob start ob gzhandler 但是由於伺服器環境的不同,有時候這個配置會和php.ini檔案中的zlib壓縮配置衝突。3.1新版...