(thinkphp实例教程)(thinkphp小项目实例)

(thinkphp实例教程)(thinkphp小项目实例)

图片来自网络

我们在进行开发时,常常需要对一些数据进行验证操作,但是当需要验证的数据过多时,整个过程将会变得非常繁琐。给大家看一张图大家体会一下,这是我公司一程序猿写的批量导入时的数据验证,虽然他已经尽力将代码理清晰,但是看起来还是很复杂。

(thinkphp实例教程)(thinkphp小项目实例)

以下省略50行

所以,用好ThinkPHP自动验证功能,可以让开发事半功倍又不失优雅。现在我就和大家分享一下ThinkPHP自动验证的教程。

数据模型

首先,我们需要了解什么是数据模型。数据模型是MVC架构中最为关键的一环,它是程序中处理应用程序数据逻辑的部分,通常模型对象负责在数据库中存取数据。

我们前面所使用的M函数就是ThinkPHP帮我们实例化了模型的基础类(Think\Model),该类完成了基本的CURD(增删改查)操作、连贯操作、统计查询等,我们本文需要用到的自动验证操作需要我们自行封装模型类。

通常我们将模型定义在Application\Home\Model目录下,模型类的命名规则是除去表前缀的数据表名称,采用驼峰法命名,并且首字母大写,然后加上模型层的名称(默认定义是Model),例如UserModel.class.php对应user表(我们没有定义数据库前缀,如果定义了数据库前缀,则对应“前缀+user”表)。

(thinkphp实例教程)(thinkphp小项目实例)

图片来自网络

自动验证介绍

自动验证可以用于数据类型、业务规则、安全判断等方面的验证操作。自动验证有两种方式:静态验证和动态验证。

两种验证方式的定义是统一规则,即:

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实例教程)(thinkphp小项目实例)

来自ThinkPHP官方文档

验证时间(可选)

  • self::MODEL_INSERT或者1新增数据时候验证

  • self::MODEL_UPDATE或者2编辑数据时候验证

  • self::MODEL_BOTH或者3全部情况下验证(默认)

这里的验证时间需要注意,并非只有这三种情况,可以根据需要增加其他的验证时间。

自动验证定义

静态验证即在模型类里定义好自动验证的规则,我们只需在模型定义里定义$_validate属性,如下:

(thinkphp实例教程)(thinkphp小项目实例)

自动验证模型定义

自动验证使用

然后,我们在控制器中只需简单的使用D函数代替M函数,即可完成自动验证。例如我们的处理注册数据代码可以改写为如下代码。

(thinkphp实例教程)(thinkphp小项目实例)

使用自动验证的注册数据处理代码

(thinkphp实例教程)(thinkphp小项目实例)

未使用自动验证的注册数据处理代码

虽然两段代码行数差不多,但是我们使用自动验证之后,比之前的代码多了限制用户名必填、检查用户名是否重复、判断密码格式功能,而且模型的定义是一劳永逸的,我们可以在以后的修改密码、修改用户信息等功能时直接使用,而无需在控制器中重复编写数据验证代码。

在使用Create方法时,会自动通过字段中是否存在主键来判断当前操作是新增还是修改数据,我们也可以直接指定当前操作类型(验证时间),如:

$User->create($_POST,1) //指定当前操作为新增

我们在用户登录时,可能仅仅需要验证用户名、密码及验证码,但是默认的验证时间(1,2,3)无法满足我们的需求,此时我们可以直接将验证时间设为其他数字(如4),然后在登录时可以指定验证时间,如:

$User->create($_POST,4) //指定验证时间为4(登录时验证)

动态验证

动态验证与静态验证类似,不过动态验证不在模型类中定义,我不单独写例子讲解,直接拿ThinkPHP官方文档给大家看一下:

(thinkphp实例教程)(thinkphp小项目实例)

动态验证

通过例子可以看出,动态验证是将静态验证的$_validate属性作为一个数组定义在需要的地方,然后可以使用M实例化对象后使用validate操作进行验证。

总结

活用自动验证,可以减少开发中很多不必要的麻烦,磨刀不误砍柴工,在设计阶段详细分析数据验证类型,并构造好自动验证方法,让开发行云流水、事半功倍!

如果您觉得小编的教程对您有所帮助,请点击关注支持小编,您的关注是对小编最大的鼓励。

声明:我要去上班所有作品(图文、音视频)均由用户自行上传分享,仅供网友学习交流,版权归原作者ChallengerV所有,原文出处。若您的权利被侵害,请联系删除。

本文标题:(thinkphp实例教程)(thinkphp小项目实例)
本文链接:https://www.51qsb.cn/article/m87t2.html

(0)
打赏微信扫一扫微信扫一扫QQ扫一扫QQ扫一扫
上一篇2023-05-30
下一篇2023-05-30

你可能还想知道

发表回复

登录后才能评论