ThinkPHP從3.0版本開始引入了全新的CBD(核心Core+行為Behavior+驅(qū)動Driver)架構(gòu)模式
ThinkPHP的核心部分包括核心函數(shù)庫、慣例配置、核心類庫(包括基礎(chǔ)類和內(nèi)置驅(qū)動及核心行為),這些是ThinkPHP必不可少的部分。
ThinkPHP/Common/functions.php // 核心函數(shù)庫
ThinkPHP/Conf/convention.php // 慣例配置文件
ThinkPHP/Conf/debug.php // 慣例調(diào)試配置文件
ThinkPHP/Mode/common.php // 普通模式定義文件
ThinkPHP/Library/Think // 核心類庫包
ThinkPHP/Library/Behavior // 系統(tǒng)行為類庫
ThinkPHP/Library/Think/App.class.php // 核心應(yīng)用類
ThinkPHP/Library/Think/Behavior.class.php // 基礎(chǔ)行為類
ThinkPHP/Library/Think/Cache.class.php // 核心緩存類
ThinkPHP/Library/Think/Controller.class.php // 基礎(chǔ)控制器類
ThinkPHP/Library/Think/Db.class.php // 數(shù)據(jù)庫操作類
ThinkPHP/Library/Think/Dispatcher.class.php // URL解析調(diào)度類
ThinkPHP/Library/Think/Exception.class.php // 系統(tǒng)基礎(chǔ)異常類
ThinkPHP/Library/Think/Hook.class.php // 系統(tǒng)鉤子類
ThinkPHP/Library/Think/Log.class.php // 系統(tǒng)日志記錄類
ThinkPHP/Library/Think/Model.class.php // 系統(tǒng)基礎(chǔ)模型類
ThinkPHP/Library/Think/Route.class.php // 系統(tǒng)路由類
ThinkPHP/Library/Think/Storage.class.php // 系統(tǒng)存儲類
ThinkPHP/Library/Think/Template.class.php // 內(nèi)置模板引擎類
ThinkPHP/Library/Think/Think.class.php // 系統(tǒng)引導(dǎo)類
ThinkPHP/Library/Think/View.class.php // 系統(tǒng)視圖類
在需要寫入數(shù)據(jù)的功能類庫中都采用了驅(qū)動化的設(shè)計思想,所以使得新的框架能夠輕松滿足分布式部署的需求,對云平臺的支持可以更簡單的實現(xiàn)了。
驅(qū)動包括
ThinkPHP/Library/Think/Cache/Driver // 緩存驅(qū)動類庫
ThinkPHP/Library/Think/Db/Driver // 數(shù)據(jù)庫驅(qū)動類庫
ThinkPHP/Library/Think/Log/Driver // 日志記錄驅(qū)動類庫
ThinkPHP/Library/Think/Session/Driver // Session驅(qū)動類庫
ThinkPHP/Library/Think/Storage/Driver // 存儲驅(qū)動類庫
ThinkPHP/Library/Think/Template/Driver // 第三方模板引擎驅(qū)動類庫
ThinkPHP/Library/Think/Template/TagLib // 內(nèi)置模板引擎標(biāo)簽庫擴展類庫
行為(Behavior)是ThinkPHP擴展機制中比較關(guān)鍵的一項擴展,行為既可以獨立調(diào)用,也可以綁定到某個標(biāo)簽(位)中進(jìn)行偵聽。
系統(tǒng)核心提供的標(biāo)簽位置包括(按照執(zhí)行順序排列):
app_init 應(yīng)用初始化標(biāo)簽位
module_check 模塊檢測標(biāo)簽位(3.2.1版本新增)
path_info PATH_INFO檢測標(biāo)簽位
app_begin 應(yīng)用開始標(biāo)簽位
action_name 操作方法名標(biāo)簽位
action_begin 控制器開始標(biāo)簽位
view_begin 視圖輸出開始標(biāo)簽位
view_template 視圖模板解析標(biāo)簽位
view_parse 視圖解析標(biāo)簽位
template_filter 模板解析過濾標(biāo)簽位
view_filter 視圖輸出過濾標(biāo)簽位
view_end 視圖輸出結(jié)束標(biāo)簽位
action_end 控制器結(jié)束標(biāo)簽位
app_end 應(yīng)用結(jié)束標(biāo)簽位
在每個標(biāo)簽位置,可以配置多個行為,行為的執(zhí)行順序按照定義的順序依次執(zhí)行。
系統(tǒng)的很多核心功能也是采用行為擴展組裝的,對于滿足項目日益紛繁復(fù)雜的需求和定制底層框架提供了更多的方便和可能性。
核心行為位于 ThinkPHP/Behavior/
目錄下面,框架核心內(nèi)置的行為包括如下:
行為名稱 | 說明 | 對應(yīng)標(biāo)簽位置 |
---|---|---|
BuildLite | 生成Lite文件(3.2.1版本新增) | app_init |
ParseTemplate | 模板文件解析,并支持第三方模板引擎驅(qū)動 | view_parse |
ShowPageTrace | 頁面Trace功能行為,完成頁面Trace功能 | view_end |
ShowRuntime | 運行時間顯示行為,完成運行時間顯示 | view_filter |
TokenBuild | 令牌生成行為,完成表單令牌的自動生成 | view_filter |
ReadHtmlCache | 讀取靜態(tài)緩存行為 | app_init |
WriteHtmlCache | 生成靜態(tài)緩存行為 | view_filter |
自定義的擴展行為可以放在核心或者應(yīng)用目錄,只要遵循命名空間的定義規(guī)則即可。 行為類的命名采用:行為名稱(駝峰法,首字母大寫)+Behavior 行為類的定義方式如下:
3.2.1版本開始,行為類的定義無需繼承Think\Behavior
類,
// 行為擴展的執(zhí)行入口必須是run
行為類必須定義執(zhí)行入口方法run
,由于行為的調(diào)用機制影響,run方法不需要任何返回值,所有返回都通過引用返回。
run方法的參數(shù)只允許一個,但可以傳入數(shù)組。
行為的調(diào)用不一定要放到標(biāo)簽才能調(diào)用,如果需要的話,我們可以在控制器中或者其他地方直接調(diào)用行為。例如,我們可以把用戶權(quán)限檢測封裝成一個行為類,例如:
namespace Home\Behavior;use Think\Behavior;class AuthCheckBehavior extends Behavior { // 行為擴展的執(zhí)行入口必須是run public function run(&$return){ if(C('USER_AUTH_ON')) { // 進(jìn)行權(quán)限認(rèn)證邏輯 如果認(rèn)證通過 $return = true; // 否則用halt輸出錯誤信息 } }}
定義了AuthCheck行為后,我們可以在控制器的_initialize方法中直接用下面的方式調(diào)用:
B('Home\Behavior\AuthCheck');
=========================================