🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
**1 小试身手** * * * * * 1 建立模板文件 打开目录D:\upnp5.6\htdocs\tp5\application\index,建立view目录。 进入模块的模板目录D:\upnp5.6\htdocs\tp5\application\index\view\ 建立模板文件test_fetch.html,输入以下内容 ~~~ <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Thinkphp模板测试文件</title> </head> <body> 这里是Viewtest:test_fetch的模板文件 </body> </html> ~~~ 建立模板文件test_assign.html,输入以下内容 ~~~ <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Thinkphp模板测试文件</title> </head> <body> 这里是Viewtest:test_assign的模板文件.<br> 名称信息:{$name};<br> 邮件信息:{$email};<br> </body> </html> ~~~ * * * * * 2 建立渲染测试控制器文件 打开控制器目录D:\upnp5.6\htdocs\tp5\application\index\controller\ 建立模板测试文件Viewtest.php,输入以下内容。 ~~~ <?php namespace app\index\controller; use think\View; class Viewtest { public function test_fetch(){ $view = new View(); return $view->fetch(); } public function test_assign(){ $view = new View(); $view->assign('name','Thinkphp'); $view->assign('email','Test@ee.com'); return $view->fetch(); } } ~~~ * * * * * 3 浏览器测试 输入http://127.0.0.1/tp5/public/index.php/Index/Viewtest/test_fetch 输出如下 ![](https://box.kancloud.cn/2016-02-25_56ce6e41524e7.jpg) 输入http://127.0.0.1/tp5/public/index.php/Index/Viewtest/test_assign 输出如下 ![](https://box.kancloud.cn/2016-02-25_56ce6e48e6601.jpg) 4 总结 框架的渲染由think/View类封装。 可以单独创建think/View对象,然后调用assign,fetch等方法。 也可以直接继承think/Controller类,调用controller封装的assign,fetch方法。 **2 开发场景** 这里是后端与前端的主要配合工作,根据公司流程安排分配合作。 **3 开发进阶** * * * * * 1 修改视图渲染配置, 修改$view的view_suffix可以修改模板后缀, 修改$view的view_depr可以修改模板分层。 打开控制器目录D:\upnp5.6\htdocs\tp5\application\index\controller\ 新建Viewconfig.php文件,输入以下内容 ~~~ <?php namespace app\index\controller; use think\View; class Viewconfig { public function test_fetch(){ $view = new \think\View(['view_suffix'=>'.htm','view_depr'=>'_']); return $view->fetch(); } public function test_assign(){ $view = new View(); $view->config(['view_suffix'=>'.htm','view_depr'=>'_']); $view->assign('name','Thinkphp'); $view->assign('email','Test@ee.com'); return $view->fetch(); } } ~~~ 浏览器输入 http://127.0.0.1/tp5/public/index.php/Index/Viewconfig/test_fetch 输出如下 ![](https://box.kancloud.cn/2016-02-25_56ce6e490583c.jpg) 可知模板文件的路径为application\index\view\viewconfig_test_fetch.htm 进入application\index\view\ 分别建立对应模板文件,文件名格式为:**小写控制器名称_小写方法名称.后缀**, viewconfig_test_fetch.htm,输入以下内容 ~~~ <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Thinkphp模板测试文件</title> </head> <body> 这里是Viewconfig:test_fetch的模板文件 </body> </html> ~~~ viewconfig_test_assign.htm,输入以下内容 ~~~ <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Thinkphp模板测试文件</title> </head> <body> 这里是Viewconfig:test_assign的模板文件.<br> 名称信息:{$name};<br> 邮件信息:{$email};<br> </body> </html> ~~~ 浏览器输入 http://127.0.0.1/tp5/public/index.php/Index/Viewconfig/test_fetch http://127.0.0.1/tp5/public/index.php/Index/Viewconfig/test_assign 正常输出模板。 view的相关配置参数见thinkphp\library\think\View.php文件。 ~~~ protected $config = [ 'theme_on' => false, 'auto_detect_theme' => false, 'var_theme' => 't', 'default_theme' => 'default', 'view_path' => '', 'view_suffix' => '.html', 'view_depr' => DS, 'view_layer' => VIEW_LAYER, 'parse_str' => [], 'engine_type' => 'think', 'namespace' => '\\think\\view\\driver\\', ]; ~~~ * * * * * 2 自定义渲染引擎 tp5默认使用Think渲染引擎, 实现在\thinkphp\library\think\view\driver\Think.php文件。 ~~~ 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()方法。 可以参考tp3.2的\ThinkPHP\Library\Think\Template\Driver\目录下的 Smarty.class.php文件,添加Smarty渲染引擎的支持。 更多的模板引擎参考[官方手册](http://www.kancloud.cn/manual/thinkphp/1785) * * * * * 3 自定义模板标签 视图渲染的模板标签配置在thinkphp\library\think\Template.php文件中定义 ~~~ protected $config = [ 'view_path' => '', 'view_suffix' => '.html', 'cache_suffix' => '.php', 'tpl_deny_func_list' => 'echo,exit', 'tpl_deny_php' => false, 'tpl_begin' => '{', 'tpl_end' => '}', 'strip_space' => false, 'tpl_cache' => true, 'compile_type' => 'file', 'cache_prefix' => '', 'cache_time' => 0, 'cache_record_file' => 'cache_record_file', 'layout_on' => false, 'layout_name' => 'layout', 'layout_item' => '{__CONTENT__}', 'taglib_begin' => '{', 'taglib_end' => '}', 'taglib_load' => true, 'taglib_build_in' => 'cx', 'taglib_pre_load' => '', 'display_cache' => false, 'cache_id' => '', 'tpl_replace_string' => [], 'tpl_var_identify' => 'array', 'namespace' => '\\think\\template\\driver\\', ]; ~~~ 可以通过修改convention.php的模板配置参数 `'template_engine' => 'Think',` 或者$view->engine()方法修改模板标签参数 **4 框架底层** 模板的视图渲染是业务逻辑的内容输出控制。 在控制器中,处理业务逻辑数据模型后,将输出结果以模板文件的方式显示。 视图渲染将带有think框架标签的模板文件编译为普通的php标签模板文件, 然后由php运行环境解析执行后输出到客户端。 tp5继承thinkphp3.2内置的丰富标签库与渲染引擎。 模板标签的使用见[官方手册 ](http://www.kancloud.cn/manual/thinkphp/1793)。