需安装think-view扩展并配置view.php启用Think引擎,控制器用assign传值、fetch渲染,模板支持{$var}变量输出、{if}{volist}等标签及自定义分页标签。

一、安装think-view模板引擎驱动
ThinkPHP 6 默认仅支持 PHP 原生模板,若需使用 ThinkTemplate 模板引擎,必须显式安装 think-view 扩展包,该扩展自动引入 think-template 核心依赖,并提供完整的视图驱动能力。
1、确保已正确配置 Composer 国内镜像源,例如执行:composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/。
2、进入项目根目录,执行安装命令:composer require topthink/think-view。
3、安装完成后,检查 vendor/topthink/think-view 是否存在;若因依赖冲突失败,可尝试添加强制解析参数:composer require topthink/think-view --with-all-dependencies。
立即学习“PHP免费学习笔记(深入)”;
4、为确保自动加载生效,执行:composer dump-autoload -o。
二、配置view.php启用ThinkTemplate引擎
安装完成后需在配置文件中明确指定模板引擎类型为 Think,否则框架仍使用默认的 PHP 原生引擎,导致模板标签(如{$var}、{volist})无法解析。
1、打开 config/view.php 配置文件。
2、将 'type' 项设置为字符串 'Think',例如:'type' => 'Think'。
3、确认 'view_path' 指向正确的模板目录,如 'view_path' => './view/'(路径末尾不带斜杠)。
4、可选:修改左右定界符以避免与 JavaScript 冲突,例如设置 'tpl_begin' => ' '}>',此时模板中需写为 <{$name}>。
三、控制器中赋值并渲染模板
数据需通过 assign 方法注入模板上下文,再调用 fetch 渲染对应路径下的 HTML 文件;模板路径遵循“模块/控制器/操作”三级结构,默认后缀为 .html。
1、在控制器方法中调用 $this->assign() 传递变量,例如:$this->assign('title', '欢迎页');
2、若传递数组,可直接赋值:$this->assign('user', ['name' => '小明', 'age' => 28]);。
3、若传递对象,同样支持:$this->assign('info', (object)['id' => 1001, 'status' => 'active']);。
4、最后返回 $this->fetch(),无需传参即可自动匹配当前控制器与操作名对应的模板文件,如 Index 控制器的 index 方法将渲染 view/index/index.html。
四、模板中变量与系统变量输出
ThinkTemplate 支持简洁语法输出变量及内置系统变量,所有变量输出必须严格遵循 { 和 $ 之间无空格的格式,否则编译失败或静默忽略。
1、输出普通变量:{$title}(对应 assign 的键名)。
2、输出数组元素:{$user.name} 或 {$user['age']}。
3、输出对象属性:{$info->id} 或 {$info:status}。
4、输出系统变量(无需 assign):{$_SERVER.PHP_SELF}、{:NOW}、{:MODULE_NAME} 等。
五、使用内置模板标签进行逻辑控制
ThinkTemplate 提供类 XML 风格的标签语法,用于条件判断、循环遍历等动态逻辑,所有标签均在模板编译阶段转为原生 PHP 代码,运行时无额外解析开销。
1、条件判断:{if $user.age gt 18}成年{else}未成年{/if}。
2、单值循环(适用于简单数组):{volist name="user" id="u"}姓名:{$u.name},年龄:{$u.age}{/volist}。
3、标准 foreach 循环:{foreach $list as $item}{$item.title}{/foreach}。
4、模板包含复用公共片段:{include file="public/header" /},其中 public/header 对应 view/public/header.html。
六、自定义扩展标签库实现分页器封装
可通过注册自定义标签库,将分页逻辑抽象为模板级标签,避免控制器中重复实例化 Paginator 对象,提升模板可读性与复用性。
1、在 config/view.php 中配置 'taglib_pre_load' => 'app\extend\taglib\Paginator'(路径按实际命名空间调整)。
2、创建标签类 app/extend/taglib/Paginator.php,继承 think emplateTagLib,并在 $tags 属性中声明 'paginator' => ['close' => 0]。
3、在 tagPaginator 方法中拼接分页 HTML 与 PHP 控制逻辑,例如生成页码列表、上一页/下一页链接、总条数提示等。
4、模板中直接使用:{paginator lists="$list" /},其中 $list 为控制器中 assign 的分页对象实例。



















