首頁 後端開發 php教程 TP框架多層MVC用法分析

TP框架多層MVC用法分析

Dec 28, 2017 pm 03:38 PM
分析 用法

本文主要介紹了thinkphp多層MVC用法,結合實例分析了thinkPHP中多層MVC的具體原理與相關使用技巧,需要的朋友可以參考下。希望對大家有幫助。

具體如下:

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;
use Think\Model;
class UserModel extends Model{}
登入後複製


邏輯層Home/Logic/UserLogical.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方法或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/default/User/add.html
View/blue/User/add.html
登入後複製

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


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;
use Think\Controller;
class UserController extends Controller{
}
登入後複製
事件控制器Home /Event/UserEvent.class.php的定義如下:

UserContrlller負責外部互動回應,透過URL請求回應,例如http ://serverName/User/index,UserEvent負責內部事件回應並且只能在內部呼叫A('User','Event');同樣我們可以設定預設的控制器層:

內部和外部是隔離的,多層控制器也不是強制的,可以根據應用的需要自由的分層,控制器裡可以根據需要調用不同的分層模型,也可以顯示不同的分層視圖,實現不同的主題。 在MVC的三層中,ThinkPHP並不依賴M和V,可以只有C或只有V,使用者只需要定義視圖,在沒有C的情況下也能自動識別,但是這種怪異的寫法會讓很多剛入門的程式設計師非常的困惑。 ######多層設計在目前的專案中還沒有用到,在.net專案中倒見到很多,下次用到再做補充。 #########相關推薦:###############TP5之Auth權限管理實例################# #TP5 自動載入機制詳解##################TP5 Model 功能摘要##########

以上是TP框架多層MVC用法分析的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

解析JSP註解的使用方法和分類 解析JSP註解的使用方法和分類 Feb 01, 2024 am 08:01 AM

JSP註解的分類及用法解析JSP註解分為兩種:單行註解:以結尾,只能註解單行程式碼。多行註解:以/*開頭,以*/結尾,可以註解多行程式碼。單行註解範例多行註解範例/**這是一段多行註解*可以註解多行程式碼*/JSP註解的用法JSP註解可以用來註解JSP程式碼,使其更易於閱

WPSdatedif函數的用法 WPSdatedif函數的用法 Feb 20, 2024 pm 10:27 PM

WPS是一款常用的辦公室軟體套件,其中的WPS表格功能被廣泛用於資料處理和計算。在WPS表格中,有一個非常有用的函數,即DATEDIF函數,它用於計算兩個日期之間的時間差。 DATEDIF函數是英文單字DateDifference的縮寫,它的語法如下:DATEDIF(start_date,end_date,unit)其中,start_date表示起始日期

如何正確使用C語言的exit函數 如何正確使用C語言的exit函數 Feb 18, 2024 pm 03:40 PM

c語言exit函數怎麼用,需要具體程式碼範例在C語言中,我們常常需要在程式中提前終止程式的執行,或是在某個特定的條件下退出程式。 C語言提供了exit()函數來實作這個功能。本文將介紹exit()函數的用法,並提供對應的程式碼範例。 exit()函數是C語言中的標準函式庫函數,它包含在頭檔中。它的作用是終止程式的執行,並且可以帶一個整數

MySQL ISNULL 函數詳解及用法介紹 MySQL ISNULL 函數詳解及用法介紹 Mar 01, 2024 pm 05:24 PM

MySQL中的ISNULL()函數是用來判斷指定表達式或列是否為NULL的函數。它傳回一個布林值,如果表達式為NULL則回傳1,否則回傳0。 ISNULL()函數可以在SELECT語句中使用,也可以在WHERE子句中進行條件判斷。 1.ISNULL()函數的基本語法:ISNULL(expression)其中,expression是要判斷是否為NULL的表達式或

織夢CMS二級目錄打不開的原因分析 織夢CMS二級目錄打不開的原因分析 Mar 13, 2024 pm 06:24 PM

標題:解析織夢CMS二級目錄打不開的原因及解決方案織夢CMS(DedeCMS)是一款功能強大的開源內容管理系統,被廣泛應用於各類網站建設中。然而,有時在搭建網站過程中可能會遇到二級目錄無法開啟的情況,這給網站的正常運作帶來了困擾。在本文中,我們將分析二級目錄打不開的可能原因,並提供具體的程式碼範例來解決這個問題。一、可能的原因分析:偽靜態規則配置問題:在使用

使用CSS Transform進行元素的變換 使用CSS Transform進行元素的變換 Feb 24, 2024 am 10:09 AM

CSS中Transform的用法CSS的Transform屬性是一種非常強大的工具,可以對HTML元素進行平移、旋轉、縮放和傾斜等操作。它可以大大改變元素的外觀,使網頁更有創意和動態。在本文中,我們將詳細介紹Transform的各種用法,並提供具體的程式碼範例。一、平移(Translate)平移是指將元素沿著x軸和y軸移動指定的距離。它的語法如下:tran

使用蘋果快速指令的方法 使用蘋果快速指令的方法 Feb 18, 2024 pm 05:22 PM

蘋果快捷指令怎麼用隨著科技的不斷發展,手機成為了人們生活中不可或缺的一部分。而在眾多手機品牌中,蘋果手機憑藉其穩定的系統和強大的功能一直備受用戶的喜愛。其中,蘋果快捷指令這項功能更是讓用戶的手機使用體驗更加便利和有效率。蘋果快捷指令是蘋果公司為其iOS12及更高版本推出的一項功能,透過建立和執行自訂指令,幫助用戶簡化手機操作流程,以達到更有效率的工作和

解析SQL中使用distinct關鍵字 解析SQL中使用distinct關鍵字 Feb 18, 2024 pm 09:21 PM

SQL中distinct用法詳解在SQL資料庫中,我們常常會遇到需要移除重複資料的情況。此時,我們可以使用distinct關鍵字,它能夠幫助我們去除重複數據,使得查詢結果更加清晰和準確。 distinct的基本使用方法非常簡單,只需要在select語句中使用distinct關鍵字即可。例如,以下是一個普通的select語句:SELECTcolumn_name

See all articles