上一篇文章讲解“重定向”,本篇文章讲解“视图-模板渲染”。
因为新版的控制器可以无需继承任何的基础类,因此在控制器中如何使用视图取决于你怎么定义控制器。
渲染模板最常用的是控制器类在继承系统控制器基类(\think\controller)后调用fetch方法,调用格式:
模板文件的写法支持下面几种:
1. 基本使用
下面是一个最典型的用法,不带任何参数:
①新建index控制器,并在控制器中新建index方法
注意:1. 不带任何参数,表示系统会按照默认规则自动定位模板文件,其规则是:当前模块/view/当前控制器名(小写)/当前操作(小写).html
②在index/view/index/下新建index.html模板文件
预览:
2. 修改模板引擎的view_depr(模板文件名分隔符)设置
①修改模板引擎的view_depr为“_”
位置:配置项文件config.php的template参数下。
注意:1. 如果有更改模板引擎的view_depr设置(假设'view_depr'=>'_')的话,则上面的自动定位规则变成:当前模块/view/当前控制器(小写)_当前操作(小写).html
②在index/view下新建index_index.html模板文件
访问index控制器下的index方法,预览:
3. 如果没有按照模板定义规则来定义模板文件(或者需要调用其他控制器下面的某个模板)
1)没有按照模板定义规则来定义模板文件
【例】在index控制器的add方法中要调用同控制器下的edit.html模板
①index控制器的add方法
注意:1. $this->fetch(‘edit’);表示调用当前控制器的edit模板。
②在index/view/index/下新建edit.html模板(view_depr设置为默认)。
访问add方法,预览:
2)调用其他控制器下的某个模板
【例】在index控制器的edit方法下,调用news控制器下的add模板。
①index控制器下的edit方法:
②在index/view/news下新建add.html模板。
访问index控制器的edit方法,预览:
4. 跨模块渲染模板
【例】在index模块的index控制器的del方法中,调用admin模块user控制器下的index.html模板。
①index模块的index控制器的del方法
②admin模块的user控制器下的index.html模板
访问index模块的index的del方法,预览:
注意:1. 渲染输出不需要写模板文件的路径和后缀。2. 这里面的控制器和操作并不一定需要有实际对应的控制器和操作,只是一个目录名称和文件名称而已。
【例2】你的项目里面可能根本没有public控制器,更没有public控制器的menu操作,但是一样可以使用。
①在index控制器中新建pub方法,调用public控制器的menu模板
②在index/view/public下新建menu.html模板
访问index控制器的pub方法,预览:
5. 从视图根目录开始读取模板
支持从视图根目录开始读取模板,即从view文件夹下读取。
①在index控制器中新建viewfloder方法,调用视图根目录下的模板。
②在index/view下新建folder.html模板
访问index控制器的viewfloder方法,预览:
注意:1. 如果需要调用视图类(think\view)的其它方法,可以直接使用$this->view对象。
【例】调用视图类的config方法(配置模板引擎),设置模板后缀。
视图类(think\view)的config方法:
默认的模板后缀:
在index方法中,新建viewtest方法
访问viewtest方法,预览:
注意:1. 在视图根目录下有folder.html模板,当设置模板后缀为.htm时,那么将不会访问folder.html模板,将会访问folder.htm模板。
6. 自定义模板文件位置
如果你的模板文件位置比较特殊或者需要自定义模板文件的位置,可以采用下面的方式处理。
①在index控制器中新建custom方法,调用自定义的模板文件位置
../template/index/是相当于当前项目入口文件的位置。
②在项目下创建template/index文件夹,并新建custom.html模板
预览:
注意:1. 这种方式需要带模板路径和后缀指定一个完整的模板文件位置,这里的../template/index目录是相对于当前项目入口文件位置。2. 如果是其他的后缀文件,也支持直接输出,例如:return $this->fetch('../template/public/menu.tpl');只要../template/index/menu.tpl是一个实际存在的模板文件。3. 要注意模板文件位置是相对于应用的入口文件,而不是模板目录。
thinkphp5连载为卓象程序员原创,转载请联系卓象程序员
关注卓象程序员,定期发布技术文章
下一篇讲解“视图-助手函数+渲染内容”