午夜91福利视频,午夜成人在线观看,午夜在线视频免费观看,午夜福利短视频,精品午夜成人免费视频APP

架構總覽

ThinkPHP應用基于MVC(模型-視(shi)圖-控制器)的(de)方式來(lai)組織。

MVC是一個設計模(mo)(mo)式,它(ta)強制性的(de)使應用程序的(de)輸(shu)(shu)入、處理(li)和輸(shu)(shu)出分開。使用MVC應用程序被分成三個核心部件:模(mo)(mo)型(xing)(M)、視圖(V)、控(kong)制器(C),它(ta)們(men)各自處理(li)自己的(de)任務。

5.0的(de)URL訪問受路由(you)決定,如果關閉路由(you)或者沒(mei)有匹配路由(you)的(de)情況下,則是基于:

//serverName/index.php(或者其它應用入口文件)/模塊/控制器/操作/參數/值…

下面的一些概念(nian)有必要做下了解,可能(neng)在后面的內容中經常會被提及(ji)。

入口文件

用戶請求的PHP文件,負責處理一個請求(注意,不一定是URL請求)的生命周期,最常見的入口文件就是index.php,有時候也會為了某些特殊的需求而增加新的入口文件,例如給后臺模塊單獨設置的一個入口文件admin.php或者一個控制器程序入口think都屬于入口文件。

應用

應用在ThinkPHP中是一個管理系統架構及生命周期的對象,由系統的 \think\App類完成,應用通常在入口文件中被調用和執行,具有相同的應用目錄(APP_PATH)的應(ying)用(yong)我們認(ren)為是(shi)同一個應(ying)用(yong),但一個應(ying)用(yong)可能存(cun)在多(duo)個入口文件。

應用具(ju)有自己獨立(li)的(de)配置(zhi)文件、公共(函數)文件。

模塊

一個典(dian)型的(de)應用是由多(duo)個模塊(kuai)組(zu)成的(de),這些模塊(kuai)通常都是應用目錄下面的(de)一個子目錄,每個模塊(kuai)都有(you)自(zi)己獨立的(de)配置文件(jian)(jian)、公共文件(jian)(jian)和類庫文件(jian)(jian)。

5.0支持(chi)單(dan)一模塊(kuai)架構設計,如(ru)果你的(de)應用下面只有一個模塊(kuai),那么這個模塊(kuai)的(de)子目錄可(ke)以(yi)省略,并且在應用配置文件中修(xiu)改:

'app_multi_module' =>	false,

控制器

每個模塊擁有獨立的MVC類(lei)庫及配置文件,一(yi)個(ge)模塊(kuai)下面有(you)多個(ge)控(kong)制(zhi)器負責響(xiang)應請求,而每個(ge)控(kong)制(zhi)器其實就(jiu)是(shi)一(yi)個(ge)獨立的控(kong)制(zhi)器類(lei)。

控制(zhi)器主(zhu)要負(fu)責請求的(de)(de)接收,并調(diao)用(yong)相關的(de)(de)模型處(chu)理,并最終通過(guo)視(shi)圖(tu)輸出(chu)。嚴格來說(shuo),控制(zhi)器不(bu)應該過(guo)多的(de)(de)介入業(ye)務(wu)邏(luo)輯(ji)處(chu)理。

事(shi)實上,5.0中控(kong)制器是可以(yi)被跳過(guo)的(de),通過(guo)路由我們可以(yi)直接把請求調度(du)到某(mou)個模型(xing)或者其他的(de)類進(jin)行處(chu)理。

5.0的控制器類比較靈活,可以無需繼(ji)承任何基礎類庫。

一個典型的Index控制器類如下:

namespace app\index\controller;

class Index 
{
    public function index()
    {
        return 'hello,ThinkPHP!';
    }
}

操作

一(yi)(yi)個(ge)(ge)控(kong)制(zhi)器包含多個(ge)(ge)操作(方(fang)法),操作方(fang)法是一(yi)(yi)個(ge)(ge)URL訪(fang)問的最(zui)小單元。

下面是一個典型的Index控制器的操作方(fang)法(fa)定義,包含了兩個操作方(fang)法(fa):

namespace app\index\controller;

class Index 
{
    public function index()
    {
        return 'index';
    }
    
    public function hello($name)
    {
        return 'Hello,'.$name;
    }
}

操作方法可以不使用任何參數,如果定義了一個非可選參數,則該參數必須通過用戶請求傳入,如果是URL請求,則通常是$_GET或者$_POST方式傳入。

模型

模型(xing)類(lei)通常完成(cheng)實際的業務邏輯和數據封裝,并返回(hui)和格式無關的數據。

模型類并不一定要訪問數據庫,而且在5.0的架構設計中,只有進行實際的數據庫查詢操作的時候,才會進行數據庫的連接,是真正的惰性連接。
ThinkPHP的(de)模型(xing)層支持多層設計(ji),你可以(yi)對(dui)模型(xing)層進(jin)行更細化的(de)設計(ji)和(he)分工(gong),例如把模型(xing)層分為邏(luo)輯層/服務層/事件層等(deng)(deng)等(deng)(deng)。

視圖

控制器調(diao)用模(mo)型類(lei)后(hou)返(fan)回的(de)數據通過視(shi)圖組裝成不(bu)同(tong)格式的(de)輸(shu)出。視(shi)圖根(gen)據不(bu)同(tong)的(de)需(xu)求,來決(jue)定調(diao)用模(mo)板引擎進行內容解析后(hou)輸(shu)出還是(shi)直(zhi)接(jie)輸(shu)出。

視圖通常(chang)會有(you)一系列(lie)的(de)模(mo)(mo)板文件對(dui)應不同的(de)控(kong)制器和操作方法,并(bing)且支(zhi)持動(dong)態設(she)置(zhi)模(mo)(mo)板目錄。

驅動

系統很多的(de)組件都采用驅(qu)動(dong)式(shi)設計(ji),從而可以更靈活的(de)擴展,驅(qu)動(dong)類的(de)位置默(mo)認(ren)是放入核心類庫目錄下面,也可以重(zhong)新(xin)定義驅(qu)動(dong)類庫的(de)命名空(kong)間而改變驅(qu)動(dong)的(de)文件位置。

行為

行為(Behavior)是在預先定義好的一個應用位置執行的一些操作。類似于AOP編程中的“切面”的概念,給某一個切面綁定相關行為就成了一種類AOP編程的(de)思想。所以,行為通(tong)常是(shi)和某(mou)個(ge)位置相關(guan),行為的(de)執行時(shi)間(jian)依(yi)賴于綁定到了哪個(ge)位置上(shang)。

要執(zhi)行(xing)行(xing)為,首先要在應(ying)用(yong)程序中進行(xing)行(xing)為偵聽,例(li)如:

// 在app_init位置偵聽行為
\think\Hook::listen('app_init');

然后對某個位(wei)置(zhi)進行(xing)行(xing)為綁定:

// 綁定行為到app_init位置
\think\Hook::add('app_init','\app\index\behavior\Test');

一個(ge)位(wei)置(zhi)上如果綁定(ding)了多個(ge)行(xing)為的,按照(zhao)綁定(ding)的順序依次執行(xing),除非遇到中斷。

命名空間

ThinkPHP采用了PHP的命名空間進行類庫文件的設計和規劃,并且符合PSR-4的自動加載規范。

文檔最后更新時間:2018-04-25 15:57:37

文檔
目錄(lu)

深色
模式

切換
寬度