ThinkPHP 渲染视图需四步:安装think-view引擎、模板放view/控制器/方法.html路径、用view()/View::fetch()或$this->fetch()调用、assign()传值后必须fetch()输出;默认无模板引擎,需composer require并配置type为Think。

ThinkPHP 渲染视图模板,核心就四件事:装对引擎、放对位置、传对数据、调对方法。不是写了 assign() 就能显示,也不是随便建个 HTML 文件就能访问——路径、依赖、语法、调用方式必须全部匹配。
必须先安装并启用 think-view 引擎
ThinkPHP 6 和 8 默认不带业务级模板引擎,只保留极简的 PHP 原生引擎(仅用于错误页)。没装 topthink/think-view,view()、View::fetch()、$this->fetch() 全都会报错,典型提示如:
Class 'think\View' not found 或 Call to undefined method View::assign()。
- 执行安装命令:
composer require topthink/think-view - 安装后检查
vendor/topthink/think-view/src/View.php是否存在 - 确认
config/view.php中'type' => 'Think'(不是'php')
控制器里正确传值并触发渲染
本质是「把数据交给模板」+「让模板解析输出」,两种常用写法都可靠:
-
推荐用助手函数
view():简洁、不依赖继承return view('index/index', ['title' => '首页', 'list' => $data]); -
用门面
View::fetch():需引入门面,适合统一管理use think\facade\View;<br>View::assign('title', '首页');<br>return View::fetch('index/index'); -
用控制器继承方式:要求类继承
\think\Controller$this->assign('title', '首页');<br>return $this->fetch('index/index');
⚠️ 注意:assign() 只是存变量,不调 fetch() 或 view(),页面一定空白。
立即学习“PHP免费学习笔记(深入)”;
模板文件要放对路径、写对语法
默认路径是 view/控制器名/方法名.html,比如 app\controller\Index.php 的 index() 方法,对应模板为 view/index/index.html。
- 变量输出用
{$title},不是<?php echo $title ?> - 循环用
{volist name="list" id="item"}{$item.name}{/volist} - 支持内置函数,如
{:date('Y-m-d', $time)}、{$name|default='匿名'} - 模板中可使用系统替换符,如
{__PUBLIC__}→/public,{__ROOT__}→ 当前网站根路径
进阶功能:布局、分页、包含
动态页面不止展示变量,还要组织结构和复用逻辑:
-
公共布局:在
view/layout.html写头尾,模板开头加{layout name="layout"},内容自动注入{__CONTENT__} -
模板包含:用
<include file="public/header"></include>复用片段,支持传参:<include file="header" title="首页"></include> -
分页渲染:控制器传
$list = $query->paginate(10),模板中写{$list->render()},可自定义主题参数



















