ThinkPHP模板引擎怎么使用_ThinkPHP视图模板标签语法与渲染方法【介绍】
ThinkPHP模板引擎常见问题:模板路径须全小写且与模块同级;assign()必须链式调用fetch()才能传参;include和extend路径相对当前模板而非view根目录;缓存位于runtime/html/,开发时需关闭。
用ThinkPHP写模板时,最让人头疼的往往不是逻辑本身,而是那些看似约定俗成、实际却暗藏坑点的规则。这几个高频问题,基本上每个新手都踩过——甚至老手偶尔也会翻车,尤其是在环境切换的时候。

模板文件路径不匹配就直接报 Template not found
ThinkPHP 的模板查找,默认走的是模块/控制器/操作这三层路径。比如你在app\index\controller\User.php的index()方法里什么都不指定,系统就会乖乖去加载app\index\view\user\index.html。听起来挺简单,但里面有几个容易忽略的细节:
- 目录名必须全小写。Linux环境对大小写敏感,
User和user是两个不同的路径,这一点在开发环境与生产环境之间经常翻车。 view目录必须和模块目录处于同级位置,也就是app\index\view,而不是app\view,这个层级搞错的话,模板引擎完全找不到目标。- 当你用
$this->fetch('profile')的时候,它只会去当前控制器同级的view子目录里找,比如user/profile.html。它不会跑到public/或者根目录的view/下面去乱翻。 - 如果想跨模块引用模板,必须带模块前缀并用
@符号连接,比如$this->fetch('admin@public/header')。这个@漏掉了,整个引用就会失效。
所以说,路径这件事,一开始就定好规则、严格对齐,能省去后面无数排查的力气。
assign() 传参后模板里取不到变量?链式断了或没触发渲染
这个问题很隐蔽。很多人以为assign()一写,数据就自动送到模板里了。实际上,assign()只是把数据放到上下文,真正触发模板解析的是fetch()或display()。常见的坑是两个动作之间的链条断了:
- 正确的做法:
$this->assign('title', '首页')->fetch();,链式调用,一气呵成。 - 错误的做法:先写
$this->assign('title', '首页');,再另起一行return $this->fetch();。你以为数据传过去了,实际上fetch()拿到的是空上下文,因为链式没有了。 - 模板里只能用
{$title}这种标签语法,别想着用直接写原生PHP,除非你手动开启了对应的配置。 - 数组遍历也要用对语法。模板引擎不支持
{$list[0].name}这种中括号索引,得用{volist name="list" item="vo"}{$vo.name}{/volist}这样的标签。
这部分其实逻辑不复杂,但链式调用的习惯一旦没养成,排查起来会非常浪费时间。
{include} 和 {extend} 的路径都是相对当前模板,不是 view 根目录
嵌套模板时最容易踩的坑就在这里。举个例子,你在view/user/index.html里写{include file="header" /},系统会去view/user/header.html找,而不是你预想中的view/public/header.html。
- 想包含公共部分,必须写完整路径:
{include file="public/header" /}。 - 使用
{extend name="public/base"}时,被继承的base.html里必须有{block name="body"}{/block}这样的占位。子模板里也要用同名block包裹对应内容,否则整个block区域都不会显示出来。 - 如果你启用了layout模式(
'layout_on' => true),记得在view/layout.html里放好{__CONTENT__}这个占位。
这个问题的本质在于“相对路径”的理解——很多开发者默认以为路径是从view根目录开始的,而实际上它是以当前模板所在目录为起点。
缓存关不关?清哪里?别清错 runtime/html/
开发阶段,模板缓存是必须关掉的。不然你改了半天.html文件,刷新页面看到的还是旧内容,心态容易崩。配置项在config/template.php里,把'cache' => false设置好就行。
但真正让人迷惑的是缓存文件的位置:
- 模板缓存放在
runtime/html/目录下,不是runtime/cache/,也不是runtime/log/。 - 可以通过命令
php think clear --template清干净,当然直接删runtime/整个目录也行,但那样太粗暴,连日志和普通缓存也一并清掉了。 - 上线后建议开启缓存,大约能省20%的渲染时间。但是有一个前提——每次修改模板后必须清缓存,否则用户看到的永远是那个旧HTML。
- 如果明明开了缓存但页面就是不更新,先检查
runtime/html/目录是否可写,再确认缓存文件是否真的被清理了。缓存文件名是带哈希的,不是按模板原名直接生成的,手工清理时别找错文件。
路径、链式调用、相对包含、缓存位置——这四个点,任何一个出问题,模板都会挂得无声无息。尤其是Linux环境下的大小写和路径层级,Windows上开发时一切正常,一部署到服务器就报“模板找不到”,十有八九是栽在了这些细节上。
Photoshop 2026 是 Adobe 推出的专业图像处理与视觉设计软件,支持 Windows、macOS 和 iPad 等平台,广泛应用于摄影修图、电商设计、平面海报、数字绘画及视觉合成等创作场景。
Blender 是一款免费开源、跨平台的专业 3D 创作软件,集建模、动画、渲染、视频编辑与视觉合成等功能于一体,广泛应用于影视动画、游戏设计和建筑可视化等领域。软件支持 Cycles 物理渲染器与 Eevee 实时渲染引擎,并提供多边形建模、骨骼绑定、物理模拟等专业工具。Blender 兼容 Windows、macOS 和 Linux 系统,安装包轻巧、运行流畅,依托活跃的全球开发者社区持续更新,是从初学者到专业创作者都值得选择的正版 3D 创作工具。
Photoshop 2026 是 Adobe 推出的专业图像处理与视觉设计软件,支持 Windows、macOS 和 iPad 等平台,广泛应用于摄影修图、电商设计、平面海报、数字绘画及视觉合成等创作场景。
Blender 是一款免费开源、跨平台的专业 3D 创作软件,集建模、动画、渲染、视频编辑与视觉合成等功能于一体,广泛应用于影视动画、游戏设计和建筑可视化等领域。软件支持 Cycles 物理渲染器与 Eevee 实时渲染引擎,并提供多边形建模、骨骼绑定、物理模拟等专业工具。Blender 兼容 Windows、macOS 和 Linux 系统,安装包轻巧、运行流畅,依托活跃的全球开发者社区持续更新,是从初学者到专业创作者都值得选择的正版 3D 创作工具。















