ThinkPHP5.0视图渲染通过控制器继承think\Controller并调用$this->fetch()或view()函数,自动将数据与HTML模板结合输出响应;需确保模板路径匹配、正确assign变量,并可选启用布局功能。

在ThinkPHP5.0中实现视图渲染,核心是将控制器中的数据与HTML模板文件结合并输出为最终响应内容,整个流程不依赖手动echo或print,而是由框架自动完成HTTP响应封装。
确认控制器继承关系
确保控制器类继承 think\Controller,这是使用 $this->fetch() 的前提。若未继承,则无法调用内置的视图方法,会触发“Call to undefined method”错误。
例如:在 app\index\controller\Index.php 中,必须声明 class Index extends \think\Controller。
准备模板文件
在对应模块的 view/ 目录下创建模板文件,路径需严格匹配控制器与操作名。
立即学习“PHP免费学习笔记(深入)”;
比如控制器为 Index、操作方法为 index(),则模板默认路径为:application/index/view/index/index.html。
若模板后缀不是 .html,需检查配置项 view_suffix,否则 fetch 会找不到文件并报错。
执行渲染输出
方法一:使用 $this->fetch() 默认定位
在控制器方法中直接写 return $this->fetch();,框架自动按「模块/小写控制器名/小写操作名」拼接路径,并加载对应模板。
方法二:显式指定模板名
写 return $this->fetch('user/edit');,此时会加载 view/user/edit.html,跳过控制器名约束,适合复用模板。
方法三:使用助手函数 view()
等效于 return view('user/edit', ['name' => '张三']);,它内部会实例化 think\View 并调用 fetch,但更简洁,且支持第三参数传入模板替换规则。
【注意】view() 是全局函数,无需 $this 上下文,可在任意位置调用,但仅限返回时使用;若在中间赋值后忘记 return,页面将空白无输出。
传递变量到模板
第一步:用 $this->assign() 单个或批量赋值
$this->assign('title', '用户列表');
$this->assign(['list' => $data, 'count' => count($data)]);
第二步:在模板中直接使用 {$title} 或 {volist name="list" id="vo"}{$vo.name}{/volist} 语法渲染。
第三步:也可在 fetch() 第二参数中直接传数组,如 return $this->fetch('', ['title' => '首页']);,该方式优先级高于 assign,会覆盖同名变量。
启用模板布局(可选)
在控制器中调用 $this->layout('layout');,即可启用布局模板功能。
此时 fetch('index') 渲染的内容会被自动注入到 view/layout.html 中的 {__CONTENT__} 占位符位置。
布局文件中可用 {% block title %}默认标题{% endblock %} 定义可被子模板重写的区块,子模板用 {% block title %}首页标题{% endblock %} 覆盖。



















