ThinkPHP5.1 模板变量输出之使用函数

分享
未结 精华 置顶
0 112
chichu
chichu 2019-07-01

需要对模板输出使用函数进行过滤或其它处理的时候,可以使用:

{$data.name|md5} 

可以使用空格,例如下面的写法是一样的:

{$data.name | md5} 

编译后的结果是:

<?php echo htmlentities(md5($data['name'])); ?> 

其中htmlentities方法是系统默认添加的(无需手动指定。

为了避免出现XSS安全问题,默认的变量输出都会使用htmlentities方法进行转义输出。

你还可以设置默认的过滤方法,在配置文件template.php中设置

'default_filter' => 'htmlspecialchars' 

就会默认使用htmlspecialchars方法过滤输出。

如果你不需要转义(例如你需要输出html表格等内容),可以使用:

{$data.name|raw} 

编译后的结果是:

<?php echo $data['name']; ?> 

系统内置了下面几个固定的过滤规则(不区分大小写)

过滤方法 描述
date 日期格式化(支持各种时间类型)
format 字符串格式化
upper 转换为大写
lower 转换为小写
first 输出数组的第一个元素
last 输出数组的最后一个元素
default 默认值
raw 不使用(默认)转义

例如

{$data.create_time|date='Y-m-d H:i'} {$data.number|format='%02d'} 

如果函数有多个参数需要调用,可以使用

{$data.name|substr=0,3} 

表示输出

<?php echo htmlentities(substr($data['name'],0,3)); ?> 

还可以支持多个函数过滤,多个函数之间用“|”分割即可,例如:

{$name|md5|upper|substr=0,3} 

编译后的结果是:

<?php echo htmlentities(substr(strtoupper(md5($name)),0,3)); ?> 

函数会按照从左到右的顺序依次调用(系统默认的过滤规则会在最后调用)。

变量输出使用的函数可以支持内置的PHP函数或者用户自定义函数,甚至是静态方法。

如果你觉得这样写起来比较麻烦,也可以直接这样写:

{:substr(strtoupper(md5($name)),0,3)} 

使用该方法输出的值不会使用默认的过滤方法进行转义。

可以在模板中直接使用系统的助手函数进行输出

{:app('cache')->get('name')} 

表示调用容器中的think\Cache对象实例输出name缓存标识内容。

{:开头的变量输出表示调用函数或者类的方法及属性,如果你要带命名空间调用类的属性,例如:

{:think\\App::VERSION} {:think\\facade\\Request::get('name')} 

类的命名空间中的\需要改成\\才能正常调用。

——《ThinkPHP5.1完全开发手册》

上一篇:cltphp 怎样安装到虚拟服务器

下一篇:数据表字段不存在是什么原因?

回帖
  • 消灭零评论
取消评论