thinkPHP中MVC模式的分析(二)

thinkPHP中MVC模式的分析(二)

V(view)-- 視圖層

模板定義

每一個模塊的模塊文件是獨立的,爲了對模塊文件更加有效的管理,ThinkPHP對模塊文件進行目錄劃分,默認的模板文件定義規則是:php

視圖目錄/[模塊主題/]'控制器名/操做名/操做名+模板後綴html

默認的視圖目錄是模塊的View目錄(模塊能夠有多個視圖文件目錄),框架的默認視圖文件後綴是.htmlthinkphp

在每一個模塊主題下面,是以模塊下面的控制器名爲目錄,而後是每一個控制器的具體操做模板文件,如:
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參數便可:mvc

// 設置默認的模板主題 'DEFAULT_THEME'=>'default'
採用模板主題後,須要在視圖目錄下面建立對應的主題目錄,和不啓用模板主題的狀況相比,模板文件只是多了一層目錄:框架

View/User/add.html //沒有啓用模板主題以前
View/default/User/add.html //啓用模板主題以後

在視圖渲染輸出以前,咱們能夠經過動態設置來改變須要使用的模板主題。函數

//在控制器中動態改變模板主題
$this->theme('blue')->display('add');

模板賦值

若是要在模板中輸出變量,必須在控制器中把變量傳遞給模板,經過assign方法對模板變量賦值佈局

$this->assign('name',$value);
//下面的寫法是等效的
$this->name=$value;

assign方法必須在displayshow方法以前調用,而且系統只會輸出設定的變量,其餘變量不會輸出(系統變量例外)。fetch

系統變量能夠經過特殊的標籤輸出,無需賦值模板變量this

賦值後,就能夠在模板文件中輸出變量,若是使用的是內置模板的話,就能夠這樣輸出:{$name}
輸出多個模板變量,可使用下面的方式:

$array['name'] = 'thinkphp';
$array['email'] = 'fdsf@123.com';
$array['phone'] = '123456789';
$this->assign($array);

模板渲染

模板定義後就能夠渲染模板輸出,系統也支持直接渲染內容輸出,模板賦值必須在模板渲染以前操做。

渲染模板

渲染模板輸出最經常使用的是使用display方法,調用格式:
display('[模板文件]'[,'字符編碼'][,'輸出類型'])模板文件的寫法支持下面幾種:
| 用法 |描述 |
|:-------|:--------------|
|不帶任何參數 |自動定位當前操做的模板文件 |
|[模塊@][控制器:][操做] |經常使用寫法,支持跨模塊 模板主題能夠和theme方法配合 |
|完整的模板文件名 |直接使用完整的模板文件名(包括模板後綴)|
eg.

//不帶任何參數 自動定位當前操做的模板文件
$this->display();

一般默認的視圖目錄是View

若是沒有按照模板定義的規則來定義模板文件(或者須要調用其餘控制器下面的某個模板),使用:

//表示調用當前控制器下面的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);

相關文章
相關標籤/搜索