Thinkphp标签库驱动的原理是什么,用法你了解吗?
Admin 2021-05-06 群英技术资讯 1974 次浏览
这篇文章主要给大家分享关于Thinkphp 框架的标签库驱动原理与用法,小编觉得是比较实用的,有需要的朋友可以参考一下,希望对大家学习PHP有一定的帮助。
在Think\Template中标签库的体现是采用XML命名空间的方式。每个标签库对应一个标签库驱动类,每个驱动类负责对标签库中的所有标签的解析。
标签库驱动类的作用其实就是把某个标签定义解析成为有效的模版文件(可以包括PHP语句或者HTML标签),标签库驱动的命名空间位于 Think\Template\TagLib,标签库驱动必须继承Think\Template\TagLib类,例如:
namespace Think\Template\Taglib;
use Think\Template\TagLib;
Class Test extends TagLib{
}
首先需要定义标签库的标签定义,标签定义包含了所有标签库中支持的所有标签,定义方式如下:
protected $tags = array(
// 定义标签
'input' => array('attr'=>'type,name,id,value','close'=>0), // input标签
'textarea' => array('attr'=>'name,id'),
);
标签库的所有支持标签都在tags属性中进行定义,tags属性是一个二维数组,每个元素就是一个标签定义,索引名就是标签名,采用小写定义,调用的时候不区分大小写。
每个标签定义支持的属性包括:
| 属性名 | 说明 |
|---|---|
| attr | 标签支持的属性列表,用逗号分隔 |
| close | 标签是否为闭合方式 (0闭合 1不闭合),默认为不闭合 |
| level | 标签的嵌套层次(只有不闭合的标签才有嵌套层次) |
| alias | 标签别名 |
定义了标签属性后,就需要定义每个标签的解析方法了,每个标签的解析方法在定义的时候需要添加“_”前缀,传入两个参数,对应属性数组和内容字符串(针对非闭合标签)。必须返回标签的字符串解析输出,在标签解析类中可以调用模板类的实例。下面是一个input解析方法的定义:
// input标签解析
public function _input($tag,$content) {
$name = $tag['name'];
$id = $tag['id'];
$type = $tag['type'];
$value = $this->autoBuildVar($tag['value']);
$str = "<input type='".$type."' id='".$id."' name='".$name."' value='".$value."' />";
return $str;
}
// textarea标签解析
public function _textarea($tag,$content) {
$name = $tag['name'];
$id = $tag['id'];
$str = '<textarea id="'.$id.'" name="'.$name.'">'.$content.'</textarea>';
return $str;
}
定义好标签库扩展之后,我们就可以在模板中使用了,首先我们必须要告诉模板申明Test标签库,用taglib标签,例如:
<taglib name='Test' />
name属性支持申明多个标签库,用逗号分隔即可。申明Test标签库之后,就可以使用Test标签库中的所有标签库了,调用方式如下:
<test:input type='radio' id='test' name='mail' value='value' /> <test:textarea id="content" name="content">$value</test:textarea>
注意:调用扩展标签库的标签的时候,必须加上标签库的XML命名空间前缀。
Input标签定义value属性可以支持变量传入,所以value被认为是一个变量名,如果在控制器中已经给value模板变量赋值,例如:
$this->assign('value','my test value');
最后标签被模板引擎编译后,就会输出:
<input type='radio' id='test' name='mail' value='my test value' /> <textarea id="content" name="content">my test vale</textarea>
以上就是关于Thinkphp标签库驱动的原理以及用法的介绍,有需要的朋友可以参考参考,希望对大家学习有帮助,想要了解更多的Thinkphp框架内容大家可以继续关注其他文章。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
PHP单例模式是什么?使用单例模式有什么好处?很多人新手在学习PHP时,对于单例模式不是很理解,下面就给大家介绍一下关于php单例模式,以及我们要如何设计单例模式和建立数据库连接。
workerman出现200错误是因为没有开放访问的权限导致的,其解决办法就是:首先找到并打开后台相关文件;然后修改代码为“filtermap.put("/websocket","anon")”;最后开通访问权限即可。
本文实例讲述了php实现的证件照换底色功能。分享给大家供大家参考,具体如下,
本文介绍一个php实现的购物车代码,功能实现完整,具有一定的参考价值。这里我们为你提供个简单的php购物车代码,从增加购物产品与发生购买了,在商城开发中,这个功能是
SVN是Subversion的简称,是一个开放源代码的版本控制系统。说得简单一点SVN就是用于多个人共同开发同一个项目,达到共用资源、记录项目版本的目的。PhpStorm内置了svn支持,因此无需单独下载svn。
成为群英会员,开启智能安全云计算之旅
立即注册关注或联系群英网络
7x24小时售前:400-678-4567
7x24小时售后:0668-2555666
24小时QQ客服
群英微信公众号
CNNIC域名投诉举报处理平台
服务电话:010-58813000
服务邮箱:service@cnnic.cn
投诉与建议:0668-2555555
Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 ICP核准(ICP备案)粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008