## 介绍
`think-template`是一个基于PHP`5.6+`实现的编译型模板引擎,主要特性包括:
- 支持XML标签库和普通标签的混合定义;
- 支持直接使用PHP代码书写;
- 支持文件包含;
- 支持多级标签嵌套;
- 支持布局模板功能;
- 一次编译多次运行,编译和运行效率非常高;
- 模板文件和布局模板更新,自动更新模板缓存;
- 系统变量无需赋值直接输出;
- 支持多维数组的快速输出;
- 支持模板变量的默认值;
- 支持页面代码去除Html空白;
- 支持变量组合调节器和格式化功能;
- 允许定义模板禁用函数和禁用PHP语法;
- 通过标签库方式扩展;
功能特性和ThinkPHP`5.1`内置的模板引擎基本一致,适用于没有使用`ThinkPHP`框架但希望找一个高性能的编译型模板引擎的情况。
## 安装
通过`composer`直接安装即可
~~~php
composer require topthink/think-template
~~~
## 用法示例
在根目录下创建`index.php`入口文件测试:
~~~php
<?php
namespace think;
require __DIR__.'/vendor/autoload.php';
// 设置模板引擎参数
$config = [
// 模板文件目录
'view_path' => './template/',
// 模板编译缓存目录(可写)
'cache_path' => './runtime/',
// 模板文件后缀
'view_suffix' => 'html',
];
$template = new Template($config);
// 模板变量赋值
$template->assign('name','thinkphp');
// 读取模板文件渲染输出
$template->fetch('index');
~~~
更多的模板引擎参数可以参考
`fetch`方法必须指定模板文件名(不需要后缀和路径),上面的代码对应的模板文件位于 `./template/index.html`。
然后就可以在模板文件中输出模板变量
~~~
Hello,{$name}!
~~~
执行入口文件应该会看到输出
```
Hello,thinkphp!
```
变量输出的定界符支持自定义,例如:
```
$config = [
// 模板文件目录
'view_path' => './template/',
// 模板编译缓存目录(可写)
'cache_path' => './runtime/',
// 模板文件后缀
'view_suffix' => 'html',
// 模板引擎普通标签开始标记
'tpl_begin' => '{',
// 模板引擎普通标签结束标记
'tpl_end' > '}',
];
```
如果要批量给模板变量赋值,可以用
```
// 批量赋值
$template->assign([
'name' => 'thinkphp',
'foo' => 'bar',
]);
```
支持直接渲染内容输出,不需要定义模板文件
```
$template = new Template($config);
// 模板变量赋值
$template->assign('name','thinkphp');
// 渲染内容输出
$content = 'Hello,{$name}!';
$template->display($content);
```
所有的模板变量默认输出都会自动进行转义处理,以避免`XSS`攻击的可能性。如果你不需要进行任何的转义,可以使用`|raw`保持原样不做转义输出(例如输出HTML内容的时候需要)。
```
Hello,{$name|raw}!
```
## 数组和对象输出
如果需要在模板中输出数组,可以使用
```
{$item.name}
// 或者
{$item['name']}
```
要输出对象的属性,可以使用
```
{$object->name}
```
也可以直接调用对象的常量或者方法
~~~cmd
常量:{$object::CONST_NAME}
方法:{$object->method()}
~~~
支持函数
```
{$name|strtolower|strip_tags}
```
## 系统变量输出
如果需要输出系统变量,可以不需要赋值给模板变量然后输出,可以直接在模板文件中输出系统变量,例如:
~~~
{$Think.server.script_name} // 输出$_SERVER['SCRIPT_NAME']变量
{$Think.session.user_id} // 输出$_SESSION['user_id']变量
{$Think.get.page} // 输出$_GET['page']变量
{$Think.cookie.name} // 输出$_COOKIE['name']变量
~~~
支持输出 `$_SERVER`、`$_ENV`、 `$_POST`、 `$_GET`、 `$_REQUEST`、`$_SESSION`和 `$_COOKIE`变量。
如果系统常量直接使用
~~~
{$Think.PHP_VERSION}
~~~
## 运算符
我们可以对模板输出使用运算符,包括如下支持。
| 运算符 | 使用示例 |
|-----|-----|
| `+` | `{$a+$b}` |
| `-` | `{$a-$b}` |
| `*` | `{$a*$b}` |
| `/` | `{$a/$b}` |
| `%` | `{$a%$b}` |
| `++` | `{$a++}` 或 `{++$a}` |
| `--` | `{$a--}` 或` {--$a}` |
| 综合运算 | `{$a+$b*10+$c} `|
在使用运算符的时候,不再支持前面提到的函数过滤用法,例如:
~~~
{$user.score+10} //正确的
{$user['score']+10} //正确的
{$user['score']*$user['level']} //正确的
{$user['score']|myFun*10} //错误的
{$user['score']+myFun($user['level'])} //正确的
~~~
## 三元运算
模板可以支持三元运算符,例如:
~~~
{$status? '正常' : '错误'}
{$info['status']? $info['msg'] : $info['error']}
{$info.status? $info.msg : $info.error }
~~~
还支持如下的写法:
~~~
{$name ?? '默认值'}
~~~
## 原样输出
可以使用`literal`标签来防止模板标签被解析,例如:
~~~cmd
{literal}
Hello,{$name}!
{/literal}
~~~
上面的`{$name}`标签被`literal`标签包含,因此并不会被模板引擎解析,而是保持原样输出。
`literal`标签还可以用于页面的JS代码外层,确保JS代码中的某些用法和模板引擎不产生混淆。
总之,所有可能和内置模板引擎的解析规则冲突的地方都可以使用`literal`标签处理。
## 模板注释
模板支持注释功能,该注释文字在最终页面不会显示,仅供模板制作人员参考和识别。
### 单行注释
格式:
~~~cmd
{/* 注释内容 */ } 或 {// 注释内容 }
~~~
例如:
~~~cmd
{// 这是模板注释内容 }
~~~
> 注意`{`和注释标记之间不能有空格。
### 多行注释
支持多行注释,例如:
~~~cmd
{/* 这是模板
注释内容*/ }
~~~
模板注释支持多行,模板注释在生成编译缓存文件后会自动删除,这一点和Html的注释不同。
更多的关于模板引擎以及标签的详细用法参考[ThinkPHP5.1手册的模板章节](https://www.kancloud.cn/manual/thinkphp5_1/354069)。
- 值得升级到5.1的18个理由
- 5.1.7版本新特性
- JSON字段类型在ORM中的使用
- 文件下载响应对象
- 教你使用5.1的数组对象查询
- 模型三大利器之一:搜索器
- 在ThinkPHP中使用Yaconf
- 掌握命令行的表格输出
- 5.1.25查询参数绑定的改进
- ThinkPHP安全规范指引
- 巧用数据集的排序功能实现统计排序
- think-orm ——基于5.1的独立ORM库
- think-template——基于ThinkPHP的独立模板引擎
- ThinkPHP5.1.26版本发布——修正版本,包含安全更新
- ThinkPHP5.0和3.2再发安全更新
- 官宣:ThinkPHP发布首个LTS版本
- 你真的了解Db类和模型的正确使用姿势么?
- 如何更有效的记录和管理日志
- 模型三大利器之二:修改器
- ThinkPHP5.1.28版本发布——修正上一版本问题,改进关联查询
- 模型三大利器之三:获取器
- API版本控制的几种思路
- ThinkPHP5.2第一个Beta版本发布测试
- 让你少犯错的数据查询基本原则
- ThinkPHP发布5.1.29版本——常规更新
- 这15个好习惯让你更容易升级到5.2
- 如何有效提高ThinkPHP的应用性能
- 让你提高开发效率的查询技巧
- 模型关联查询不完全指南
- 5.2发布Beta2版本——统一和精简大量用法
- ThinkPHP发布5.1.30版本——支持微秒时间字段写入
- ThinkPHP的数据缓存使用
- ThinkPHP5.2安装及入口文件
- ThinkPHP荣获2018 年度最受欢迎中国开源开发框架第1名
- 5.1路由使用心得技巧
- ThinkPHP5.*版本发布安全更新
- ThinkPHP项目及代码规范指北
- 5.2版本的设计规范指导
- ThinkPHP5.1.32版本发布——圣诞快乐
- 利用Trait特性给模型增加乐观锁功能
- 5.2数据库和模型的变化(摘要)
- ThinkPHP模板引擎实现和常见问题
- ThinkPHP5.0.24版本发布——安全更新
- 不忘初心,方得始终——ThinkPHP十三周年报告
- ThinkPHP5+相关资源汇总
- 异步社区ThinkPHP周年庆专享优惠活动
- 5.2路由的调整和改进
- ThinkPHP发布5.1.33版本——包含安全更新
- ThinkPHP扩展开发指南
- ThinkPHP发布5.2Beta3版本
- ThinkPHP发布5.1.34版本——喜迎新年
- ThinkPHP发布5.2RC1版本
- ThinkPHP发布5.1.35版本——常规更新
- 5.2配置类的调整
- 5.2时间查询的改进和优化
- 5.2RC版本升级不完全指导(仅供学习参考)
- ThinkPHP5.2版本正式变更为6.0版本
- ThinkPHP百度云云虚拟主机专享免费活动
- 事件系统以及查询事件、模型事件的使用
- ThinkPHP6.0RC2版本发布——架构升级、精简核心
- ThinkPHP5.1.36LTS版本发布——常规更新
- 新版Session和Cookie设计变化
- ThinkPHP5.1.37版本发布——常规更新
- ThinkPHP6.0RC3版本发布——细节完善,体验优化
- 6.0中间件使用详解
- Composer各大厂商镜像地址
- ThinkPHP6.0发布计划公告
- 「ThinkPHP开发者周刊」招募志愿者
- ThinkPHP6.0日志变化
- ThinkPHP5.1.38版本发布——常规更新
- ThinkPHP6.0RC4版本发布——ORM独立,日志多通道支持
- ThinkORM2.0开发指南上线
- ThinkPHP6.0RC5版本发布——多应用模式独立,中间件机制调整
- ThinkPHP6.0版本发布——程序员节福利
- ThinkPHP5.1.39LTS版本发布——常规更新
- ThinkPHP6.0.1版本发布——圣诞快乐!
- 回顾2019,展望2020!
- ThinkPHPV6.0.2版本发布——2020新春快乐!
- 周年福利系列:Swoole合作优惠
- 亿速云成为ThinkPHPV6.0独家赞助发布商🎉
- 新冠疫情工具和限免资源专题(保持更新中)
- 周年福利系列:创宇信用认证合作优惠
- 周年福利系列:码云企业版限时10%优惠
- 周年福利系列:想天短说抵现优惠
- think-swoole直播:从零开始掌握swoole开发
- 周年福利系列:B2C开源电商ShopXO授权8折优惠
- 周年福利系列:LayuiAdmin 永久授权限时优惠
- ThinkPHP资源导航站上线——构建生态 服务未来
- ThinkPHP官方技术支持服务和应用服务市场上线公测
- ThinkPHP市场精选——推广基本要素
- ThinkPHP市场精选——客服聊天专题
- ThinkPHPV6.0.3版本发布——端午安康
- ThinkPHP开发者扶持计划
- 6.0.3版本关键更新及升级事项
- 「ThinkPHP开发者周刊」改版重启
- ThinkPHP市场精选——企业建站专题
- ThinkPHP 提供统一API接口服务
- ThinkPHP市场精选——直播电商专题
- ThinkAPI服务SDK发布
- 官方服务市场启用独立子域名
- ThinkPHP市场精选——刷脸支付专题
- ThinkAPI推出会员服务计划
- ThinkPHPV6.0.4版本发布——中秋国庆双节快乐
- ThinkPHPV5.1.40版本发布——常规更新
- 1024程序员节福利走一波
- ThinkPHP V6.0.5版本发布——兼容Composer2.0
- 知识图谱应用场景——源论技术沙龙
- ThinkPHP5.*版本改进Composer2.0的兼容
- 官方市场双十一精选推荐
- 技术人做产品有机会么(文末送课程)
- 本周秒杀——古德云售后获客营销系统
- ThinkAPI服务更新——支持接口分组和PHP版本依赖调整
- PHP8新特性盘点
- PHP8新特性系列:构造器属性提升使用及注意事项
- ThinkPHP2021新年寄语
- ThinkPHP V6.0.6&V5.1.41版本发布——兼容PHP8.0
- PHP如何更优雅地调用API接口
- ThinkPHP V6.0.7发布——修正版本
- ThinkAPI服务更新——IP白名单
- 最新版ThinkORM对于时间字段的调整
- ThinkAPI短信接口正式上线
- ThinkPHP V6.0.8版本发布——多环境变量配置支持
- 顶想云写作服务开启第一次公测
- ThinkSSL上线——官方SSL/TLS证书服务
- MDBootstrap国内用户福利——ThinkPHP官方市场首发
- ThinkPHP V6.0.9版本发布——常规更新
- ThinkORM功能盘点——虚拟模型
- 全面支持主流GIT版本库——云写作服务第二次公测
- 云写作服务私有化部署方案之:版本库私有化
- 看云双十一活动
- ThinkPHP V6.0.10LTS发布——兼容PHP8.1
- ThinkPHP V6.0.12发布——命令行兼容8.1
- 顶想云知识管理上线公测——构建企业文档中心和知识库
- 顶想云上线——助力生态数字化建设
- 618活动进行中——官方市场迎来一波更新
- 顶想云知识管理正式上线——看云文档启动迁移服务
- ThinkPHP V6.0.13发布——常规更新
- 顶想云网站助理服务上线——构建产品支持服务
- ThinkPHP发布6.1.0&6.0.14版本——安全更新
- ThinkPHP新版社区上线试运营
- ThinkAPI上架人脸核身接口——助力网站实名认证
- 辞旧迎新——旧版社区停止注册及发帖
- ThinkPHP6.1.2版本发布——兼容PHP8.2