模板渲染
模板渲染
| 版本 | 新增功能 |
|---|---|
| 5.0.4 | 支持渲染視圖根目錄的模板文件 |
渲染模板最常用的是繼承系統的控制器基類后調用fetch方法,調用格式:
fetch('[模板文件]'[,'模板變量(數組)'])
模(mo)板文件的寫法支持下面幾種:
| 用法 | 描述 |
|---|---|
| 不帶任何參數 | 自動定位當前操作的模板文件 |
| [模塊@][控制器/][操作] | 常用寫法,支持跨模塊 |
| 完整的模板文件名 | 直接使用完整的模板文件名(包括模板后綴) |
下面是一(yi)個最典型的用法(fa),不(bu)帶任何參數:
// 不(bu)帶任何參(can)數 自動定位當前操(cao)作的(de)模(mo)板文(wen)件
return $this->fetch();
表示系統會按照默認(ren)規則自動定位(wei)模板文件,其規則是:
當前模塊/默認視圖目錄/當前控制器(小寫)/當前操作(小寫).html
V5.0.16+版本開始,默認的模板文件名規則改為實際操作方法名的小寫+下劃線寫法。但可以配置template.auto_rule的值為2 恢復之前(qian)的全小寫(xie)規則。
如果有更改模板引擎的view_depr設置(假設 'view_depr'=>'_')的(de)話,則(ze)(ze)上(shang)面的(de)自(zi)動(dong)定(ding)位規則(ze)(ze)變成(cheng):
當前模塊/默認視圖目錄/當前控制器(小寫)_當前操作(小寫).html
如果沒有按照模(mo)板定(ding)義規則來定(ding)義模(mo)板文件(或者需要(yao)調用其他控制(zhi)器下面的某個模(mo)板),可以使用:
// 指(zhi)定模板(ban)輸出
return $this->fetch('edit');
表示調用當前控(kong)制器下面的(de)edit模板
return $this->fetch('member/read');
表示(shi)調(diao)用Member控制器(qi)下面的read模板。
跨模塊渲染模板
return $this->fetch('admin@member/edit');
渲染輸出不需要寫模板文(wen)件的(de)路徑(jing)和后綴。這(zhe)里(li)面(mian)的(de)控制(zhi)(zhi)(zhi)器和操作(zuo)并不一(yi)定需要有(you)實際(ji)對應的(de)控制(zhi)(zhi)(zhi)器和操作(zuo),只是一(yi)個目錄名稱(cheng)和文(wen)件名稱(cheng)而已,例如,你的(de)項(xiang)目里(li)面(mian)可(ke)能(neng)根本沒(mei)有(you)Public控制(zhi)(zhi)(zhi)器,更沒(mei)有(you)Public控制(zhi)(zhi)(zhi)器的(de)menu操作(zuo),但是一(yi)樣可(ke)以使(shi)用
return $this->fetch('public/menu');
輸(shu)(shu)出(chu)這個模板(ban)文(wen)件。理解了這個,模板(ban)輸(shu)(shu)出(chu)就清晰了。
fetch方法支持在渲染輸出的時候傳入模板變量,例如:
return $this->fetch('read', ['a'=>'a','b'=>'b']);
V5.0.4+版(ban)本開始(shi),支持從(cong)視圖(tu)根目(mu)錄開始(shi)讀取模(mo)板,例如:
$this->fetch('/menu');
表示讀(du)取的模板是
當前模塊/默認視圖目錄/menu.html
如果你的控制器類沒有繼承系統的控制器基類,請使用系統提供的助手函數
view進行渲染輸出。
自定義模板路徑
如果(guo)你的模(mo)(mo)板(ban)文(wen)件位置(zhi)比較特殊或者需要(yao)自定義模(mo)(mo)板(ban)文(wen)件的位置(zhi),可以(yi)采用下面的幾(ji)種方式(shi)處理。
渲染完整模板
return $this->fetch('./template/public/menu.html');
這種方式需要帶模板路徑和后綴指定一個完整的模板文件位置,這里的template/public目(mu)錄是位于當前項(xiang)目(mu)入口文件位置下(xia)面。如果是其他的后綴文件,也支持直(zhi)接輸出(chu),例如:
return $this->fetch('./template/public/menu.tpl');
只要./template/public/menu.tpl是一(yi)個實際存(cun)在的模板(ban)文件。
要注意(yi)模(mo)(mo)板(ban)文件位置是相對于(yu)應用的入口文件,而(er)不(bu)是模(mo)(mo)板(ban)目錄。
渲染內容
如果希望直接解析內容而不通過模板文件的話,可以使用display方法:
return $this->display($content,$vars);
渲染的內容中一樣可以使用模(mo)板引擎的相關標(biao)簽。
