模板渲染
模板渲染
版本 | 新增功能 |
---|---|
5.0.4 | 支持渲染視圖根目錄的模板文件 |
渲染模板最常用的是繼承系統(tǒng)的控制器基類后調(diào)用fetch
方法,調(diào)用格式:
fetch('[模板文件]'[,'模板變量(數(shù)組)'])
模板文件的寫(xiě)法支持下面幾種:
用法 | 描述 |
---|---|
不帶任何參數(shù) | 自動(dòng)定位當(dāng)前操作的模板文件 |
[模塊@][控制器/][操作] | 常用寫(xiě)法,支持跨模塊 |
完整的模板文件名 | 直接使用完整的模板文件名(包括模板后綴) |
下面是一個(gè)最典型的用法,不帶任何參數(shù):
// 不帶任何參數(shù) 自動(dòng)定位當(dāng)前操作的模板文件
return $this->fetch();
表示系統(tǒng)會(huì)按照默認(rèn)規(guī)則自動(dòng)定位模板文件,其規(guī)則是:
當(dāng)前模塊/默認(rèn)視圖目錄/當(dāng)前控制器(小寫(xiě))/當(dāng)前操作(小寫(xiě)).html
V5.0.16+
版本開(kāi)始,默認(rèn)的模板文件名規(guī)則改為實(shí)際操作方法名的小寫(xiě)+下劃線寫(xiě)法。但可以配置template.auto_rule
的值為2 恢復(fù)之前的全小寫(xiě)規(guī)則。
如果有更改模板引擎的view_depr
設(shè)置(假設(shè) 'view_depr'=>'_'
)的話,則上面的自動(dòng)定位規(guī)則變成:
當(dāng)前模塊/默認(rèn)視圖目錄/當(dāng)前控制器(小寫(xiě))_當(dāng)前操作(小寫(xiě)).html
如果沒(méi)有按照模板定義規(guī)則來(lái)定義模板文件(或者需要調(diào)用其他控制器下面的某個(gè)模板),可以使用:
// 指定模板輸出
return $this->fetch('edit');
表示調(diào)用當(dāng)前控制器下面的edit模板
return $this->fetch('member/read');
表示調(diào)用Member控制器下面的read模板。
跨模塊渲染模板
return $this->fetch('admin@member/edit');
渲染輸出不需要寫(xiě)模板文件的路徑和后綴。這里面的控制器和操作并不一定需要有實(shí)際對(duì)應(yīng)的控制器和操作,只是一個(gè)目錄名稱和文件名稱而已,例如,你的項(xiàng)目里面可能根本沒(méi)有Public控制器,更沒(méi)有Public控制器的menu操作,但是一樣可以使用
return $this->fetch('public/menu');
輸出這個(gè)模板文件。理解了這個(gè),模板輸出就清晰了。
fetch
方法支持在渲染輸出的時(shí)候傳入模板變量,例如:
return $this->fetch('read', ['a'=>'a','b'=>'b']);
V5.0.4+
版本開(kāi)始,支持從視圖根目錄開(kāi)始讀取模板,例如:
$this->fetch('/menu');
表示讀取的模板是
當(dāng)前模塊/默認(rèn)視圖目錄/menu.html
如果你的控制器類沒(méi)有繼承系統(tǒng)的控制器基類,請(qǐng)使用系統(tǒng)提供的助手函數(shù)
view
進(jìn)行渲染輸出。
自定義模板路徑
如果你的模板文件位置比較特殊或者需要自定義模板文件的位置,可以采用下面的幾種方式處理。
渲染完整模板
return $this->fetch('./template/public/menu.html');
這種方式需要帶模板路徑和后綴指定一個(gè)完整的模板文件位置,這里的template/public
目錄是位于當(dāng)前項(xiàng)目入口文件位置下面。如果是其他的后綴文件,也支持直接輸出,例如:
return $this->fetch('./template/public/menu.tpl');
只要./template/public/menu.tpl
是一個(gè)實(shí)際存在的模板文件。
要注意模板文件位置是相對(duì)于應(yīng)用的入口文件,而不是模板目錄。
渲染內(nèi)容
如果希望直接解析內(nèi)容而不通過(guò)模板文件的話,可以使用display
方法:
return $this->display($content,$vars);
渲染的內(nèi)容中一樣可以使用模板引擎的相關(guān)標(biāo)簽。