thinkphp6视图模板需安装think-view扩展、配置type为'think'、清模板缓存,且必须用view()传数组而非$this->assign();路径为app/view/下模块/控制器/操作结构,大小写敏感,模板语法不支持中括号索引和原生php表达式。

ThinkPHP 视图模板不是写完 assign() 就能显示的,关键在引擎是否启用、路径是否匹配、链式是否完整——三者缺一不可。
TP6 必须装 topthink/think-view 才能用 {$var} 标签
TP6 默认只认 PHP 原生模板(.php 后缀),{$title}、{volist} 这类语法根本不会解析。不装扩展,模板就是纯静态 HTML。
- 执行
composer require topthink/think-view安装扩展 - 确认
config/view.php中'type' => 'Think'(注意大小写,不是'think'或'THINK') - 删掉
config/app.php里任何旧版view配置块,避免覆盖 - 改完配置后清缓存:
php think clear --template,否则旧配置仍生效
view('index') 和 $this->fetch() 不能混用
TP6 废除了控制器基类的 assign() 和 fetch() 方法。继续写 $this->assign('x', 1) 会直接报 Call to undefined method。
- 推荐方式:直接传数组,
return view('index', ['title' => '首页', 'list' => $data]); - 若需全局变量(如站点名),用门面:
think\facade\View::share(['site_name' => 'MySite']); - 想手动控制渲染流程?用
think\facade\View::fetch('index'),但必须配合View::assign(),且不能和view()混用 -
view('admin@index')才能跨模块渲染,漏掉@就去找当前模块下的admin@index
模板路径错一个字母就 Template not found
TP6 的路径规则是「模块/控制器/操作」三级结构,但默认不走模块目录,而是从 app/view/ 开始算起。很多人卡在这一步。
-
view('user/profile')→ 实际找app/view/user/profile.html,不是app/index/view/user/profile.html - 多模块项目中,
view('admin@index')→ 找app/view/admin/index.html,不是app/admin/view/index/index.html - Linux 下大小写敏感:
User/index.html≠user/index.html,目录名必须全小写 -
{include file="header"}是相对当前模板路径,不是view/根目录;要包含公共头,得写{include file="public/header"}
模板里数组不能用 {$list[0].name} 直接取
ThinkTemplate 语法不支持中括号索引,也不支持点号链式访问对象属性(除非开启 tpl_deny_php => false 并用 {:} 调用)。
- 列表遍历必须用
{volist name="list" item="vo"},然后{$vo.name} - 简单判断用
{if condition="$status eq 'active'"},别写{if $status == 'active'}(不支持原生 PHP 表达式) - 日期格式化:
{$time|date='Y-m-d H:i'},函数过滤必须用竖线|,不能写成<?php echo date(...) ?> - 模板中变量名和控制器传入的键名必须完全一致,
['user_info' => $u]就只能用{$user_info.name}(前提是开了对象访问支持)
最常被忽略的是:view_path 配置被环境配置覆盖、runtime/html/ 权限不可写、以及 view_suffix 改了但文件没同步重命名——这些不会报错,只会静默返回空内容。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











