ThinkPHP 作为一款流行的 PHP 开发框架,其内置的模板引擎让 HTML 开发更高效安全,以下是详细使用方法,结合实践与安全建议:
基础模板语法
ThinkPHP 默认使用普通标签语法(也可切换为其他语法),所有模板标签需定义在 内:
<!-- 输出变量 --> <p>用户名:{$user.name}</p> <!-- 系统变量 --> <p>当前时间:{$Think.now}</p>
变量输出与过滤
-
安全输出
默认开启 HTML 转义,防止 XSS 攻击:<!-- 用户输入内容自动转义 --> <div>{$content|default=''}</div>
若需原始 HTML(如富文本),关闭转义:
<div>{$content|raw}</div> <!-- 慎用,需确保内容可信 -->
-
默认值处理
避免变量未定义报错:<span>{$user.email|default='未设置'}</span>
逻辑控制
-
条件判断
支持if
/elseif
/else
:{if $user.score > 90} <p class="excellent">优秀用户</p> {elseif $user.score > 60} <p>合格</p> {else} <p>待提升</p> {/if}
-
循环遍历
处理数组或对象:<ul> {volist name="list" id="item"} <li>{$item.id} - {$item.title}</li> {/volist} </ul>
支持索引和空数据提示:
{volist name="list" id="item" key="k" empty="暂无数据"} <p>第{$k}条:{$item.name}</p> {/volist}
模板复用
-
引入公共片段
{include file="public/header" /}
传参示例:
{include file="header" title="首页" keywords="ThinkPHP教程" /}
-
布局继承
定义基础模板layout.html
:<!DOCTYPE html> <html> <head> <title>{block name="title"}默认标题{/block}</title> </head> <body> {block name="content"}主内容区{/block} </body> </html>
子模板扩展:
{extend name="layout"} {block name="title"}用户中心 - {$Think.config.app_name}{/block} {block name="content"} <h2>个人资料</h2> <!-- 子模板特有内容 --> {/block}
表单处理
-
安全提交
使用表单令牌防 CSRF:<form action="{:url('user/update')}" method="post"> {:token()} <!-- 自动生成隐藏令牌字段 --> <input type="text" name="nickname"> <button type="submit">提交</button> </form>
-
数据回填
编辑页自动填充值:<input type="text" name="email" value="{$user.email|default=''}">
URL 生成
框架方法保证路径一致性:
<a href="{:url('article/detail', ['id' => $article.id])}">阅读全文</a> <!-- 输出示例:/index/article/detail/id/15.html -->
安全实践
-
始终开启模板转义
在config/template.php
中确认:'tpl_replace_string' => [ '__STATIC__' => '/static', ], 'tpl_deny_php' => true, // 禁止模板执行PHP 'default_filter' => 'htmlspecialchars', // 默认过滤
-
过滤用户输入
控制器层验证:public function update() { $data = input('post.'); // 使用验证器过滤 $validate = new appvalidateUser; if (!$validate->check($data)) { return error($validate->getError()); } // ... }
性能优化
- 缓存模板:生产环境开启
'tpl_cache' => true
- 减少嵌套:避免超过 3 层循环嵌套
- 使用静态资源:CSS/JS 通过
__STATIC__
常量映射:<script src="__STATIC__/js/main.js"></script>
引用说明参考 ThinkPHP 6.x 官方文档(https://www.kancloud.cn/manual/thinkphp6_0/1037578),结合安全最佳实践编写,请确保使用框架最新版本,并定期审查第三方扩展安全性。
通过以上方法,您可高效构建安全的前端页面,始终牢记:用户输入不可信!模板层转义是最后防线,结合控制器验证才能全面防护,多利用框架内置功能,减少重复代码,提升开发质量。
原创文章,发布者:酷盾叔,转转请注明出处:https://www.kd.cn/ask/34052.html