在Ubuntu中使用ThinkPHP模板引擎前,需先完成系统环境配置及项目初始化:
sudo apt update
sudo apt install php php-cli php-fpm php-json php-common php-mysql php-zip php-gd php-mbstring php-curl php-xml php-bcmath
curl -sS https://getcomposer.org/installer | php
sudo mv composer.phar /usr/local/bin/composer
composer create-project topthink/think my_project
cd my_project
php think run
浏览器访问http://127.0.0.1:8000,若看到ThinkPHP欢迎页面则说明环境搭建成功。ThinkPHP默认使用内置模板引擎(ThinkTemplate),需通过配置文件调整模板行为:
config/view.php(ThinkPHP 6.x)或application/config.php(ThinkPHP 5.x)。view_path指定视图文件根目录(默认为app/[模块名]/view);view_suffix设置模板文件后缀(默认.html);tpl_begin(开始标记,如{)、tpl_end(结束标记,如});tpl_cache开启编译缓存(生产环境建议开启,true/false)。return [
'view_path' => app()->getAppPath() . 'view/', // 视图根目录
'view_suffix' => 'html', // 模板后缀
'tpl_begin' => '{', // 标签开始
'tpl_end' => '}', // 标签结束
'tpl_cache' => false, // 关闭缓存(开发环境)
];
模板引擎的核心功能是将控制器中的业务数据渲染到视图层:
assign()方法逐个传递;public function index()
{
$this->assign('title', 'Ubuntu下ThinkPHP模板使用指南');
$this->assign('content', '本教程将指导你完成模板配置与使用。');
return $this->fetch(); // 自动渲染当前控制器/方法对应的模板(如app/controller/Index.php的index方法对应view/Index/index.html)
}
public function index()
{
$data = [
'title' => '批量传递变量',
'content' => '这种方式更高效',
'items' => ['ThinkPHP', 'Ubuntu', '模板引擎']
];
return $this->fetch('index', $data); // 显式指定模板文件(app/view/Index/index.html)
}
{$变量名}语法输出变量,支持直接调用PHP函数(如日期格式化);<!DOCTYPE html>
<html>
<head>
<title>{$title}</title>
</head>
<body>
<h1>{$content}</h1>
<p>当前时间:{:date('Y-m-d H:i:s')}</p>
</body>
</html>
模板继承是提升开发效率的关键特性,通过extend(继承)和block(模板块)实现公共部分的复用:
app/view目录下新建布局文件(如layout.html),定义页面骨架;<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>{$title}</title>
</head>
<body>
<div class="header">
<h1>网站Logo</h1>
</div>
<div class="container">
{__CONTENT__} <!-- 内容占位符,子模板将替换此处 -->
</div>
<div class="footer">
<p>© 2025 Ubuntu+ThinkPHP教程</p>
</div>
</body>
</html>
app/view/Index/index.html)中使用extend继承布局,并通过block重写指定区域;{extend name="layout"} <!-- 继承layout.html -->
{block name="content"} <!-- 重写content块 -->
<h2>{$content}</h2>
<ul>
{foreach $items as $item}
<li>{$item}</li>
{/foreach}
</ul>
{/block}
ThinkPHP模板引擎提供丰富的标签库,用于实现逻辑控制、循环输出等功能:
if/else标签实现分支逻辑;{if $user}
<p>欢迎回来,{$user.name}!</p>
{else}
<p>请<a href="/login">登录</a>。</p>
{/if}
foreach标签遍历数组;<ul>
{foreach $items as $key => $value}
<li>索引:{$key},值:{$value}</li>
{/foreach}
</ul>
cache标签缓存静态内容(如导航菜单),提升性能;{cache name="nav_menu", time=3600}
<div class="nav">
<a href="/">首页</a>
<a href="/about">关于</a>
</div>
{/cache}
common.php中定义函数,模板中通过管道符|调用;// app/common.php
function formatPrice($price)
{
return '¥' . number_format($price, 2);
}
<p>商品价格:{$product.price|formatPrice}</p>
Index控制器对应app/controller/Index.php,模板文件对应app/view/Index/index.html)。app/view)需赋予Web服务器写入权限(开发环境),生产环境建议关闭写入权限;sudo chown -R www-data:www-data /var/www/html/my_project/app/view
sudo chmod -R 755 /var/www/html/my_project/app/view
tpl_cache => false),便于实时查看修改效果;生产环境开启缓存(tpl_cache => true),并定期通过Cache::clear()清除过期缓存。htmlspecialchars过滤器过滤用户输入,防止XSS攻击;<p>用户名:{$username|htmlspecialchars}</p>