在实例化的过程当中,常用D方法和M方法,这两个方法的区别在于M方法实例化模型无需用户为每一个数据表定义模型类,若是D方法没有找到定义的模型类,则会自动调用M方法。通俗一点说:M实例化参数是数据库的表名。D实例化的是你本身在Model文件夹下面创建的模型文件
例如:$user = new UserModel();
等价于$user = D('user');
若是实例化的是一个空模型
例如 $Demo = new Model();
那么它等价于 $Demo = M();
------------------------------------------------------------------------php
D和M的区别主要在于:M方法不须要建立模型类文件,M方法不会读取模型类,因此默认状况下自动验证是无效的,可是能够经过动态赋值的方式实现而D方法必须有建立模型类。咱们能够用下面两种方法去建立一个数据表的映射对象第一种:$Test = D('Test')第二种:$Test = new Model('Test')虽然这两种均可以对数据进行select,insert,delete,udpate操做,在数据验证上有很大的不一样,用第一种方式实例一个模型就会有数据检查功能,若是 title 没有填写的话就会提示 “请输入标题” (这个是tp提供的一个自动验证功能,固然也须要在相应的model中定义好验证条件);若是用第二种就没有了·····还有1个区别就是当用了$trueTableName后,必须用$test=d('test'),表示查询的是test表,若是用的是$test=m('test'),那么都表示查询的数据边是think_test。thinkphp2.0版本测试有如此上面的问题html
-----------------------------------------------------------------------------------------------thinkphp
通俗点说:D就是实例化一个基于Model文件的Model。M则是经过直接实例化Model方法(ThinkPHP基类)来动态的实例化一个Model对象,即便这个对应的Model文件不存在数据库
============================================================================数组
A快速实例化Action类库缓存
B执行行为类安全
C配置参数存取方法服务器
D快速实例化Model类库cookie
F快速简单文本数据存取方法session
L 语言参数存取方法
M快速高性能实例化模型
R快速远程调用Action类方法
S快速缓存存取方法
U URL动态生成和重定向方法
W 快速Widget输出方法
D函数实例化的是你当前项目的Lib/Model下面的模块。若是该模块不存在的话,直接返回实例化Model的对象(意义就与M()函数相同)。而M只返回,实例化Model的对象。它的$name参数做为数据库的表名来处理对数据库的操做。
ThinkPHP函数详解:U方法
U方法用于完成对URL地址的组装,特色在于能够自动根据当前的URL模式和设置生成对应的URL地址,格式为:
U('地址','参数','伪静态','是否跳转','显示域名');
在模板中使用U方法而不是固定写死URL地址的好处在于,一旦你的环境变化或者参数设置改变,你不须要更改模板中的任何代码。
在模板中的调用格式须要采用 {:U('地址', '参数'…)} 的方式
U方法的用法示例:
复制代码
也能够支持分组调用:
复制代码
固然,也能够只是写操做名,表示调用当前模块的
复制代码
除了分组、模块和操做名以外,咱们也能够传入一些参数:
复制代码
U方法的第二个参数支持传入参数,支持数组和字符串两种定义方式,若是只是字符串方式的参数能够在第一个参数中定义,下面几种方式都是等效的:
复制代码
可是不容许使用下面的定义方式来传参数:
复制代码
根据项目的不一样URL设置,一样的U方法调用能够智能地对应产生不一样的URL地址效果,例如针对:
复制代码
这个定义为例。
若是当前URL设置为普通模式的话,最后生成的URL地址是:
复制代码
若是当前URL设置为PATHINFO模式的话,一样的方法最后生成的URL地址是:
复制代码
若是当前URL设置为REWRITE模式的话,一样的方法最后生成的URL地址是:
复制代码
若是你同时还设置了PATHINFO分隔符的话:
复制代码
就会生成
复制代码
若是当前URL设置为REWRITE模式,而且设置了伪静态后缀为html的话,一样的方法最后生成的URL地址是:
复制代码
若是设置了多个伪静态支持,那么会自动取第一个伪静态后缀添加到URL地址后面,固然你也能够手动在U方法里面指定要生成的伪静态后缀,例如:
复制代码
就会生成
复制代码
U方法还能够支持路由,若是咱们定义了一个路由规则为:
复制代码
那么可使用
复制代码
最终生成的URL地址是:
复制代码
若是你的应用涉及到多个子域名的操做地址,那么也能够在U方法里面指定须要生成地址的域名,例如:
复制代码
@后面传入须要指定的域名便可。
此外,U方法的第5个参数若是设置为true,表示自动识别当前的域名,而且会自动根据子域名部署设置APP_SUB_DOMAIN_DEPLOY和APP_SUB_DOMAIN_RULES自动匹配生成当前地址的子域名。
若是开启了URL_CASE_INSENSITIVE,则会统一辈子成小写的URL地址。
3.1.2版本开始,U方法还能够支持生成URL地址中的锚点,例如:
复制代码
就会生成
复制代码
若是域名和锚点同时使用的话,注意顺序为先锚点后域名,例如:
ThinkPHP函数详解:I方法
正如你所见到的同样,I方法是ThinkPHP众多单字母函数中的新成员,其命名来自于英文Input(输入),主要用于更加方便和安全的获取系统输入变量,能够用于任何地方,用法格式以下:
I('变量类型.变量名',['默认值'],['过滤方法'])
变量类型是指请求方式或者输入类型,包括:
变量类型 | 含义 |
---|---|
get | 获取GET参数 |
post | 获取POST参数 |
param | 自动判断请求类型获取GET、POST或者PUT参数 |
request | 获取REQUEST 参数 |
put | 获取PUT 参数 |
session | 获取 $_SESSION 参数 |
cookie | 获取 $_COOKIE 参数 |
server | 获取 $_SERVER 参数 |
globals | 获取 $GLOBALS参数 |
注意:变量类型不区分大小写。
变量名则严格区分大小写。
默认值和过滤方法均属于可选参数。
咱们以GET变量类型为例,说明下I方法的使用:
支持默认值:
采用方法过滤:
支持直接获取整个变量类型,例如:
用一样的方式,咱们能够获取post或者其余输入类型的变量,例如:
param变量类型是框架特有的支持自动判断当前请求类型的变量获取方式,例如:
若是当前请求类型是GET,那么等效于 $_GET['id'],若是当前请求类型是POST或者PUT,那么至关于获取 $_POST['id'] 或者 PUT参数id。
而且param类型变量还能够用数字索引的方式获取URL参数(必须是PATHINFO模式参数有效,不管是GET仍是POST方式都有效),例如:
当前访问URL地址是
那么咱们能够经过
事实上,param变量类型的写法能够简化为:
使用I方法的时候 变量其实通过了两道过滤,首先是全局的过滤,全局过滤是经过配置VAR_FILTERS参数,这里必定要注意,3.1版本以后,VAR_FILTERS参数的过滤机制已经更改成采用array_walk_recursive方法递归过滤了,主要对过滤方法的要求是必须引用返回,因此这里设置htmlspecialchars是无效的,你能够自定义一个方法,例如:
而后配置:
若是须要进行屡次过滤,能够用:
filter_exp方法是框架内置的安全过滤方法,用于防止利用模型的EXP功能进行注入攻击。
由于VAR_FILTERS参数设置的是全局过滤机制,并且采用的是递归过滤,对效率有所影响,因此,咱们更建议直接对获取变量过滤的方式,除了在I方法的第三个参数设置过滤方法外,还能够采用配置DEFAULT_FILTER参数的方式设置过滤,事实上,该参数的默认设置是:
也就说,I方法的全部获取变量都会进行htmlspecialchars过滤,那么:
一样,该参数也能够支持多个过滤,例如:
若是咱们在使用I方法的时候 指定了过滤方法,那么就会忽略DEFAULT_FILTER的设置,例如:
I方法的第三个参数若是传入函数名,则表示调用该函数对变量进行过滤并返回(在变量是数组的状况下自动使用array_map进行过滤处理),不然会调用PHP内置的filter_var方法进行过滤处理,例如:
表示 会对$_POST['email'] 进行 格式验证,若是不符合要求的话,返回空字符串。
(关于更多的验证格式,能够参考 官方手册的filter_var用法。)
或者能够用下面的字符标识方式:
能够支持的过滤名称必须是filter_list方法中的有效值(不一样的服务器环境可能有所不一样),可能支持的包括:
在有些特殊的状况下,咱们不但愿进行任何过滤,即便DEFAULT_FILTER已经有所设置,可使用:
一旦过滤参数设置为NULL,即表示再也不进行任何的过滤。
TkinkPHP 3.2.3版本以后,I函数增长了变量修饰符的功能,方便过滤变量和转换变量
如:
I('变量类型.变量名/修饰符')
可使用的修饰符包括:
修饰符 | 做用 |
---|---|
s | 强制转换为字符串类型 |
d | 强制转换为整形类型 |
b | 强制转换为布尔类型 |
a | 强制转换为数组类型 |
f | 强制转换为浮点类型 |
来自:tp手册