視圖功能由Think\View類和模板引擎(驅動)類一起完成。
## 實例化視圖類
~~~
// 實例化視圖類
$view = new \think\View();
// 渲染模板輸出
return $view->fetch();
~~~
如果你的控制器繼承了\think\Controller類的話,則可以直接使用
~~~
// 渲染模板輸出
return $this->fetch();
~~~
> 需要注意的是,ThinkPHP5的視圖fetch方法不會直接渲染輸出,只是返回解析后的內容。如果在控制器類返回 視圖解析內容的話,渲染輸出系統會自動調用think\Response類的send方法進行渲染輸出。
## 模板定位規則
模板文件目錄默認位于模塊的view目錄下面,視圖類的fetch方法中的模板文件的定位規則如下:
如果調用沒有任何參數的fetch方法:
~~~
return $view->fetch();
~~~
則按照系統的默認規則定位模板文件到:
>[info] ### [模板文件目錄]/當前控制器名(小寫)/當前操作名(小寫).html
如果(指定操作)調用:
~~~
return $view->fetch('add');
~~~
則定位模板文件為:
>[info] ### [模板文件目錄]/當前控制器名/add.html
如果調用控制器的某個模板文件使用:
~~~
return $view->fetch('user/add');
~~~
則定位模板文件為:
#### [模板文件目錄]/user/add.html
全路徑模板調用:
~~~
return $view->fetch(MODULE_PATH.'view/public/header.html');
~~~
則定位模板文件為:
#### MODULE_PATH.'view/public/header.html'
## 模板主題支持
默認并不支持模板主題功能,需要配置開啟,例如:
~~~
$view = new \think\View();
return $view->theme('blue')->fetch('User/add');
~~~
表示使用blue模板主題風格輸出,定位模板文件為:
#### [模板文件目錄]/blue/User/add.html
或者也可以使用下面的方式支持模板主題:
~~~
$view = new \think\View();
return $view->fetch('blue/User/add');
~~~
和上面使用模板主題功能輸出的模板文件是相同的。
如果要進行自動偵測模板主題的話,按照如下方式使用:
~~~
$view = new \think\View();
return $view->theme(true)->fetch('User/add');
~~~
theme(true) 表示開啟模板主題自動偵測功能,通常是在URL地址中傳入模板主題參數,默認情況下,只需要使用:
~~~
http://serverName/moduleName/controllerName/actionName/t/blue
~~~
之后,模板主題名稱將會被保存到Cookie中,直到重新指定新的模板主題名稱。
## 設置輸出參數
可以在視圖實例化的時候設置參數或者在模板輸出之前動態設置參數,例如下面兩種方式等效:
~~~
// 實例化視圖類的時候設置參數
$view = new \think\View(['view_suffix'=>'.html','view_depr'=>'/']);
// 或者使用http方法動態設置視圖輸出參數
$view->config(['view_suffix'=>'.html','view_depr'=>'_']);
~~~
支持獨立設置某個參數,例如:
~~~
$view->config('view_suffix','.html');
~~~
## 模板輸出替換
支持對視圖輸出的內容進行字符替換,例如:
~~~
$view->config('parse_str',['__PUBLIC__'=>'/public/'])->fetch();
~~~
如果需要全局替換的話,可以直接在配置文件中添加:
~~~
'parse_str'=>[
'__PUBLIC__'=>'/public/',
'__ROOT__' => '/',
]
~~~
在渲染模板或者內容輸出的時候就會自動根據設置的替換規則自動替換。
## 設置模板引擎
使用View類的engine方法設置當前視圖輸出的模板解析引擎,如果沒有指定模板引擎的話 默認為PHP自身模板。
~~~
// 設置模板引擎
return $view->engine('think',['tpl_path'=>MODULE_PATH.'view/','cache_path'=>MODULE_PATH.'cache/','compile_type'=>'File'])->fetch();
~~~
模板引擎的參數根據不同的模板引擎而異。
視圖類的模板引擎驅動位于`think\view\driver\`目錄下面,可以自行擴展。
Think模板引擎的驅動類實現如下:
~~~
namespace think\view\driver;
use think\Template;
class Think {
private $template = null;
public function __construct($config=[]){
$this->template = new Template($config);
}
public function fetch($template,$data=[],$cache=[]){
if(is_file($template)) {
$this->template->display($template,$data,$cache);
}else{
$this->template->fetch($template,$data);
}
}
}
~~~
模板引擎驅動類需要實現的接口方法就是fetch方法。
如果你不需要任何模板引擎,直接使用原生PHP作為模板解析的話,可以使用
~~~
$view->engine('php')->fetch();
~~~
如果全局使用的話,還可以直接配置:
~~~
'engine_type' => 'php',
~~~
## 視圖綁定數據
綁定數據到模板輸出有三種方式:
### 1、使用assign方法給模板變量賦值:
~~~
// 實例化視圖類
$view = new \think\View();
$view->assign('name','ThinkPHP');
$view->assign('email','thinkphp@qq.com');
// 或者批量賦值
$view->assign(['name'=>'ThinkPHP','email'=>'thinkphp@qq.com']);
// 模板輸出
return $view->fetch();
~~~
### 2、直接對象賦值
~~~
// 實例化視圖類
$view = new \think\View();
$view->name = 'ThinkPHP';
$view->email= 'thinkphp@qq.com';
// 模板輸出
return $view->fetch();
~~~
### 3、在輸出模板的時候傳入模板變量
例如:
~~~
return $view->fetch('index',['name'=>'ThinkPHP','email'=>'thinkphp@qq.com']);
~~~
## 其他設置
如果希望直接解析內容而不通過模板文件的話,可以使用:
~~~
return $view->show($content,$vars);
~~~
指定當前的視圖模板文件目錄:
~~~
return $view->config('view_path',MODULE_PATH.'tpl/')->fetch();
~~~