thinkphp是mvc模式。ThinkPHP基于MVC模式,并且均支持多層(multi-Layer)設計,是一個為了簡化企業(yè)級應用開發(fā)和敏捷WEB應用開發(fā)而誕生的開源輕量級PHP框架。
本教程操作環(huán)境:Windows7系統、thinkphp v5.1版、Dell G3電腦。
ThinkPHP基于MVC模式,并且均支持多層(multi-Layer)設計。
ThinkPHP是一個快速、兼容而且簡單的輕量級國產PHP開發(fā)框架,誕生于2006年初,原名FCS,2007年元旦正式更名為ThinkPHP,遵循Apache2開源協議發(fā)布,從Struts結構移植過來并做了改進和完善,同時也借鑒了國外很多優(yōu)秀的框架和模式,使用面向對象的開發(fā)結構和MVC模式,融合了Struts的思想和TagLib(標簽庫)、RoR的ORM映射和ActiveRecord模式。
M(model)– 模型類
立即學習“PHP免費學習筆記(深入)”;
模型
在ThinkPHP中基礎的模型類就是ThinkModel 類,該類完成了基本的CURD、ActiveRecord模式、連貫操作和統計查詢,一些高級特性被封裝到另外的模型擴展中。
注意: 基礎模型類的設計非常靈活,甚至可以無需進行任何模型定義,就可以進行相關數據表的ORM和CURD操作,只有在需要封裝單獨的業(yè)務邏輯的時候,模型類才是必須被定義的。
模型定義
模型類并非必須定義,只有當存在獨立的業(yè)務邏輯或者屬性的時候才需要定義。
模型類通常需要繼承系統的ThinkModel類或其子類,下面是一個HomeModelUserModel類的定義:
????namespace?HomeModel; ????use?ThinkModel; ????class?UserModel?extends?Model{ ????}
模型類的作用大多數情況是操作數據庫,按照系統的規(guī)范來命名模型類的話,大多數情況下是可以自動對應數據表的。
模型名 | 約定對應數據表(假設數據表的前綴定義是think_) |
---|---|
UserModel | think_user |
UserTypeModel | think_user_type |
V(view)– 視圖層
模板定義
每個模塊的模塊文件是獨立的,為了對模塊文件更加有效的管理,ThinkPHP對模塊文件進行目錄劃分,默認的模板文件定義規(guī)則是:
視圖目錄/[模塊主題/]’控制器名/操作名/操作名+模板后綴
默認的視圖目錄是模塊的View目錄(模塊可以有多個視圖文件目錄),框架的默認視圖文件后綴是.html。
在每個模塊主題下面,是以模塊下面的控制器名為目錄,然后是每個控制器的具體操作模板文件,如:
User控制器的add操作 對應的模塊文件就應該是:
./Application/Home/View/User/add.html
如果默認視圖層不是View,設置如:
‘DEFAULT_V_LAYER’=>’Template’,//設置默認的視圖層名稱,對應的模板文件就變成了:./Application/Home/Template/User/add.html。
模板文件的默認后綴是.html,可以通過TMPL_TEMPLATE_SUFFIX來配置。
‘TMPL_TEMPLATE_SUFFIX’=>’.tpl’
定義后,User控制器的add操作 對應的模板文件就變成是:./Application/Home/View/User/add.tpl
模板主題
模板主題可以對相同的控制器輸出進行不同的布局和樣式調整
一個模塊需要支持多套模板文件的話,就可以使用模板主題功能。默認情況下,沒有開啟模板主題功能,如果需要開啟,設置DEFAULT_THEME參數即可:
// 設置默認的模板主題
‘DEFAULT_THEME’=>’default’
采用模板主題后,需要在視圖目錄下面創(chuàng)建對應的主題目錄,和不啟用模板主題的情況相比,模板文件只是多了一層目錄:
View/User/add.html?//沒有啟用模板主題之前 View/default/User/add.html?//啟用模板主題之后
在視圖渲染輸出之前,我們可以通過動態(tài)設置來改變需要使用的模板主題。
//在控制器中動態(tài)改變模板主題 $this->theme('blue')->display('add');
模板賦值
如果要在模板中輸出變量,必須在控制器中把變量傳遞給模板,通過assign方法對模板變量賦值
$this->assign('name',$value);//下面的寫法是等效的 $this->name=$value;
assign方法必須在display和show方法之前調用,并且系統只會輸出設定的變量,其他變量不會輸出(系統變量例外)。
系統變量可以通過特殊的標簽輸出,無需賦值模板變量
賦值后,就可以在模板文件中輸出變量,如果使用的是內置模板的話,就可以這樣輸出:{$name}
輸出多個模板變量,可以使用下面的方式:
$array['name']?=?'thinkphp'; $array['email']?=?'fdsf@123.com'; $array['phone']?=?'123456789'; $this->assign($array);
模板渲染
模板定義后就可以渲染模板輸出,系統也支持直接渲染內容輸出,模板賦值必須在模板渲染之前操作。
渲染模板
渲染模板輸出最常用的是使用display方法,調用格式:
display(‘[模板文件]'[,’字符編碼’][,’輸出類型’])模板文件的寫法支持下面幾種:
用法 | 描述 |
---|---|
不帶任何參數 | 自動定位當前操作的模板文件 |
[模塊@][控制器:][操作] | 常用寫法,支持跨模塊 模板主題可以和theme方法配合 |
完整的模板文件名 | 直接使用完整的模板文件名(包括模板后綴) |
eg.
//不帶任何參數?自動定位當前操作的模板文件 $this->display();
通常默認的視圖目錄是View
如果沒有按照模板定義的規(guī)則來定義模板文件(或者需要調用其他控制器下面的某個模板),使用:
//表示調用當前控制器下面的edit模塊 $this->display('edit'); //表示調用Member控制器下面的read模塊 $this->display('Member:read');
如果我們使用了模板主題功能,那么也可以支持主題調用,使用:
表示調用blue主題下面的User控制器的edit模塊 $this->theme('blue')->display('User:edit');
獲取模板地址
T函數用于生成模板文件名,用法:
T([資源://][模塊@][主題/][控制器/]操作,[視圖分層])
T函數的返回值為一個完整的模板文件名,可以直接用于display和fetch方法進行渲染輸出。
eg.
T('Public/menu'); //返回?當前模塊/View/Public/menu.html T('blue/Public/menu'); //返回?當前模塊/View/blue/Public/menu.html T('Public/menu','Tpl'); //返回?當前模塊/Tpl/Public/menu.html T('Admin@Public/menu'); //返回?Admin/View/Public/menu.html
在display方法中直接使用T函數
//使用T函數輸出模板 $this->display(T('Admin@Public/menu'));
T函數可以輸出不同的視圖分層模塊。
獲取內容
如果需要獲取渲染模板的輸出內容而不是直接輸出,可以使用fetch方法。
eg.
$content = $this->fetch(‘Member:edit’);
使用fetch方法獲取渲染內容后,可以進行過濾和替換等操作。
渲染內容
如果沒有定義任何模板文件,或者把模板內容存儲到數據庫的話,就需要使用show方法來渲染輸出。
show方法調用格式:
show(‘渲染內容’[,’字符編碼’][,’輸出類型’])
eg.$this->show($content);
【相關教程推薦:thinkphp框架】