ThinkPHP模板引擎使用技巧
ThinkPHP模板引擎的核心作用是分离业务逻辑与视图层,通过模板文件(默认后缀.html
)将控制器传递的数据渲染为动态页面。模板文件通常存放在项目根目录的view
文件夹下,遵循“控制器名/方法名/模板名.html”的命名规范(如Index
控制器的load
方法对应view/Index/load.html
)。控制器中可通过assign()
方法逐个传递数据(如$this->assign('title', '页面标题')
),或通过数组一次性传递多个数据(如return view('index', ['title' => '标题', 'content' => '内容'])
);渲染时使用fetch()
方法,框架会自动匹配对应的模板文件。
模板继承是提升代码复用性的关键功能,通过“基础模板+子模板”的模式减少重复代码。首先创建基础模板(如view/layouts/main.html
),定义页面的整体结构(如头部、尾部、公共CSS/JS),并使用{block}
标签标记可替换区域(如{block name="content"}默认内容{/block}
);子模板通过{extend}
标签继承基础模板(如{extend name="layouts/main"}
),并通过{block}
标签覆盖基础模板中的对应区域(如{block name="content"}<h1>{$title}</h1><p>{$content}</p>{/block}
)。这种方式能确保大型项目中页面结构的一致性,同时降低维护成本。
{$var}
语法输出控制器传递的变量(如{$title}
),若变量包含特殊字符(如HTML标签),可使用{:htmlspecialchars($var)}
转义,防止XSS攻击。{if}
标签实现逻辑分支(如{if $status == 1}<p>正常</p>{else}<p>禁用</p>{/if}
),支持elseif
和else
子句。{foreach}
标签遍历数组(如{foreach $list as $item}<li>{$item.name}</li>{/foreach}
),可通过{$key}
获取数组键名,{$item}
获取数组值。{:
标签调用PHP函数(如{:date('Y-m-d', $item.create_time)}
),可将函数结果直接输出到模板。application/common.php
中定义全局函数(如function formatDate($timestamp) { return date('Y-m-d H:i:s', $timestamp); }
),模板中通过|
符号调用(如{$item.create_time|formatDate}
),用于处理复杂数据格式。|
符号对变量进行处理(如{$username|htmlspecialchars}
用于转义HTML标签,{$price|number_format(2)}
用于格式化数字为两位小数),ThinkPHP内置了多个常用过滤器,也可自定义过滤器扩展功能。模板缓存能显著提升页面加载速度,减少服务器解析开销。在config/view.php
中配置缓存选项:'cache' => true
开启缓存,'cache_time' => 3600
设置缓存有效期(单位:秒,默认3600秒)。开发环境中可关闭缓存('cache' => false
),避免修改模板后需手动清除缓存的麻烦;生产环境中保持开启,并根据业务需求调整缓存时间。需要时可通过\think\facade\Cache::clear()
手动清除所有模板缓存,确保数据实时性。
<!-- 注释内容 -->
)添加模板注释,便于后续维护时快速定位代码逻辑。{block}
块内的代码),提高代码可读性,避免因代码混乱增加调试难度。