ThinkPHP作为国内广泛使用的PHP开发框架,自带了功能完善的模板引擎,开发者可以通过简单的配置和代码调用,快速实现视图层的渲染工作,无需手动拼接HTML字符串,大幅提升开发效率。
模板文件存放规则
ThinkPHP的模板文件默认存放在项目的application/模块名/view/控制器名/目录下,文件名需要和控制器中渲染模板时指定的名称对应,后缀默认为.html。如果是多模块项目,需要根据当前访问的模块自动匹配对应目录下的模板文件。
比如当前访问的是index模块下的User控制器的profile方法,默认会加载application/index/view/user/profile.html模板文件。如果需要自定义模板路径,可以在配置文件中修改view_path参数。
基础模板渲染与变量分配
在控制器中渲染模板主要有两种方式,最常用的是fetch方法,该方法会自动定位模板文件并渲染输出。如果需要分配变量到模板中,可以使用assign方法,或者在fetch方法的第二个参数中直接传递变量数组。
控制器端代码示例
<?php
namespace appindexcontroller;
use thinkController;
class User extends Controller
{
public function profile()
{
// 方式一:先分配变量再渲染
$this->assign('username', '张三');
$this->assign('age', 25);
// 渲染默认模板,即view/user/profile.html
return $this->fetch();
// 方式二:直接传递变量数组渲染
// $data = ['username' => '李四', 'age' => 28];
// return $this->fetch('profile', $data);
}
}
模板文件接收变量示例
模板中可以直接使用{$变量名}的语法输出分配的变量内容,模板引擎会自动解析该语法并替换为对应的变量值。
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>用户资料页</title>
</head>
<body>
<h1>用户基本信息</h1>
<p>用户名:{$username}</p>
<p>年龄:{$age}</p>
</body>
</html>
常用内置模板标签使用
ThinkPHP模板引擎提供了丰富的内置标签,用于处理循环、条件判断、包含子模板等常见场景,开发者无需在模板中编写原生PHP代码,保持模板的简洁性。
循环标签volist
volist标签用于遍历数组类型的变量,常用于输出列表数据,支持设置遍历的起始位置、步长、空数据提示等属性。
<h2>用户列表</h2>
<ul>
<volist name="user_list" id="user">
<li>{$user.id} - {$user.name} - {$user.email}</li>
</volist>
</ul>
对应的控制器端分配变量代码:
public function userList()
{
$userList = [
['id' => 1, 'name' => '张三', 'email' => 'zhangsan@ipipp.com'],
['id' => 2, 'name' => '李四', 'email' => 'lisi@ipipp.com'],
['id' => 3, 'name' => '王五', 'email' => 'wangwu@ipipp.com'],
];
$this->assign('user_list', $userList);
return $this->fetch('userList');
}
条件判断标签if
if标签用于实现条件判断逻辑,支持eq、neq、gt、lt等比较运算符,也可以直接使用PHP的比较语法。
<p>
<if condition="$age gt 18">
该用户已成年
<else />
该用户未成年
</if>
</p>
包含子模板标签include
如果多个模板文件有公共的头部、底部内容,可以使用include标签引入公共子模板,减少代码重复。
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>公共页面</title>
</head>
<body>
<include file="public/header" />
<div class="content">
这里是页面主体内容
</div>
<include file="public/footer" />
</body>
</html>
上述代码会引入application/当前模块/view/public/header.html和footer.html两个公共模板文件。
模板配置与常见问题
可以在config/view.php配置文件中修改模板引擎的相关参数,比如设置模板后缀、是否开启模板缓存、缓存有效期等。如果模板修改后没有立即生效,可以检查是否开启了模板缓存,或者手动清除runtime目录下的缓存文件。
另外需要注意,模板中输出的变量如果可能包含HTML内容,默认会被模板引擎转义,避免XSS攻击。如果需要原样输出HTML内容,可以使用{$变量名|raw}语法,比如{$content|raw}。