图片来自网络
我们在进行开拓时,常常须要对一些数据进行验证操作,但是当须要验证的数据过多时,全体过程将会变得非常繁琐。给大家看一张图大家体会一下,这是我公司一程序猿写的批量导入时的数据验证,虽然他已经尽力将代码理清晰,但是看起来还是很繁芜。
以下省略50行

以是,用好ThinkPHP自动验证功能,可以让开发事半功倍又不失落优雅。现在我就和大家分享一下ThinkPHP自动验证的教程。
数据模型首先,我们须要理解什么是数据模型。数据模型是MVC架构中最为关键的一环,它是程序中处理运用程序数据逻辑的部分,常日模型工具卖力在数据库中存取数据。
我们前面所利用的M函数便是ThinkPHP帮我们实例化了模型的根本类(Think\Model),该类完成了基本的CURD(增编削查)操作、连贯操作、统计查询等,我们本文须要用到的自动验证操作须要我们自行封装模型类。
常日我们将模型定义在Application\Home\Model目录下,模型类的命名规则是撤除表前缀的数据表名称,采取驼峰法命名,并且首字母大写,然后加上模型层的名称(默认定义是Model),例如UserModel.class.php对应user表(我们没有定义数据库前缀,如果定义了数据库前缀,则对应“前缀+user”表)。
图片来自网络
自动验证先容自动验证可以用于数据类型、业务规则、安全判断等方面的验证操作。自动验证有两种办法:静态验证和动态验证。
两种验证办法的定义是统一规则,即:
array(
array(验证字段1,验证规则,缺点提示,[验证条件,附加规则,验证韶光]),
array(验证字段2,验证规则,缺点提示,[验证条件,附加规则,验证韶光]),
......
);
参数解释如下:
验证字段 (必须)
须要验证的表单字段名称,这个字段不一定是数据库字段,也可以是表单的一些赞助字段,例如确认密码和验证码等等。有个别验证规则和字段无关的情形下,验证字段是可以随意设置的,例如expire有效期规则是和表单字段无关的。如果定义了字段映射的话,这里的验证字段名称该当是实际的数据表字段而不是表单字段。
验证规则 (必须)
要进行验证的规则,须要结合附加规则,如果在利用正则验证的附加规则情形下,系统还内置了一些常用正则验证的规则,可以直接作为验证规则利用,包括:require 字段必须、email 邮箱、url URL地址、currency 货币、number 数字。
提示信息 (必须)
用于验证失落败后的提示信息定义
验证条件 (可选)
包含下面几种情形:
self::EXISTS_VALIDATE 或者0 存在字段就验证(默认)
self::MUST_VALIDATE 或者1 必须验证
self::VALUE_VALIDATE或者2 值不为空的时候验证
附加规则(可选)
合营验证规则利用,包括下面一些规则:
来自ThinkPHP官方文档
验证韶光(可选)
self::MODEL_INSERT或者1新增数据时候验证
self::MODEL_UPDATE或者2编辑数据时候验证
self::MODEL_BOTH或者3全部情形下验证(默认)
这里的验证韶光须要把稳,并非只有这三种情形,可以根据须要增加其他的验证韶光。
自动验证定义静态验证即在模型类里定义好自动验证的规则,我们只需在模型定义里定义$_validate属性,如下:
自动验证模型定义
自动验证利用然后,我们在掌握器中只需大略的利用D函数代替M函数,即可完成自动验证。例如我们的处理注册数据代码可以改写为如下代码。
利用自动验证的注册数据处理代码
未利用自动验证的注册数据处理代码
虽然两段代码行数差不多,但是我们利用自动验证之后,比之前的代码多了限定用户名必填、检讨用户名是否重复、判断密码格式功能,而且模型的定义是一劳永逸的,我们可以在往后的修正密码、修正用户信息等功能时直策应用,而无需在掌握器中重复编写数据验证代码。
在利用Create方法时,会自动通过字段中是否存在主键来判断当前操作是新增还是修正数据,我们也可以直接指定当前操作类型(验证韶光),如:
$User->create($_POST,1) //指定当前操作为新增
我们在用户登录时,可能仅仅须要验证用户名、密码及验证码,但是默认的验证韶光(1,2,3)无法知足我们的需求,此时我们可以直接将验证韶光设为其他数字(如4),然后在登录时可以指定验证韶光,如:
$User->create($_POST,4) //指定验证韶光为4(登录时验证)
动态验证动态验证与静态验证类似,不过动态验证不在模型类中定义,我不单独写例子讲解,直接拿ThinkPHP官方文档给大家看一下:
动态验证
通过例子可以看出,动态验证是将静态验证的$_validate属性作为一个数组定义在须要的地方,然后可以利用M实例化工具后利用validate操作进行验证。
总结活用自动验证,可以减少开拓中很多不必要的麻烦,磨刀不误砍柴工,在设计阶段详细剖析数据验证类型,并布局好自动验证方法,让开发行云流水、事半功倍!