首页 理论教育ThinkPHP实战:数据验证提高开发效率

ThinkPHP实战:数据验证提高开发效率

【摘要】:因为数据验证关系到数据的完整性和规范性,所以数据验证需要开发人员认真调试。ThinkPHP提供了简单、易用的表单字段验证处理功能,能够极大地提高开发效率。表8-1 系统内置的表单验证规则2.配置验证规则验证规则本身支持验证错误提示,所以在ThinkPHP中使用表单验证规则非常简单。

数据验证是数据插入数据表前一个重要的步骤,甚至可以说是必须要做的一个步骤。不仅PHP应用如此,其他语言类型的应用也如此。因为数据验证关系到数据的完整性和规范性,所以数据验证需要开发人员认真调试。

传统的PHP开发,一般首先在视图用使用JavaScript或Jquery等脚本进行初步的表单验证,然后在后台使用PHP正则或者字符处理函数对表单数据进行验证,这无疑是很好的处理方式,但是由于编写正则需要额外的知识,并且如果所有字段都使用正则或函数来处理,难免会影响开发效率,尤其在表单字段众多时更是值得注意。ThinkPHP提供了简单、易用的表单字段验证处理功能,能够极大地提高开发效率。接下来将介绍系统内置的验证规则,结合前端验证脚本,可以快速地实现友好、强大的数据验证功能。

1.定义验证规则

定义数据验证规则,需要在自定模型中进行定义。和其他数据处理方式一样,数据验证也是使用成员属性值来实现的,配置数据验证的属性为$_validate,该属性值是一个多维数据,格式如以下代码所示。

978-7-111-42852-7-Part02-294.jpg

需要说明的是,系统提供的验证方式只是包装和简化了现有的PHP验证方式,例如PHP正则、字符串处理函数等,所以无论是灵活性还是可靠性两者都是一样的。针对数据表单特性,系统一共提供了7种数据验证规则,如表8-1所示。

表8-1 系统内置的表单验证规则

978-7-111-42852-7-Part02-295.jpg

2.配置验证规则

验证规则本身支持验证错误提示(支持多语言),所以在ThinkPHP中使用表单验证规则非常简单。为了方便演示,这里将继续使用tpk_article和tpk_user数据表作为验证数据表,对应的模板表单代码如下所示。

978-7-111-42852-7-Part02-296.jpg

读者也可以使用其他数据表来演示,只需要注意字段名称即可。下面将分别介绍系统内置的7种验证规则。

(1)regex正则验证

正则验证是系统最常用的一种表单字段验证方式,也是默认的验证方式。例如判断表单字段是否为空,系统使用的就是正则验证。正则验证的关键字为require,如以下代码所示。

978-7-111-42852-7-Part02-297.jpg

正则验证的本质是正则表达式,系统允许开发人员使用数组配置代替将难以记牢的正则表达式,有效地提高开发效率。

(2)使用函数验证(function)

正则验证只适用于已有的系统内置验证规则,如果验证规则不存在,验证将失效。所以正则验证的扩展性是有限的。配合函数验证,将能够实现更加灵活的扩展验证。函数验证通常是指使用自定义函数实现验证。假设需要验证标题字符数量,如果字数大于2则允许提交,否则将终止表单提交。步骤如下。

首先需要在Common/common.php中定义自定义函数,该函数用于计算中文字符的数量,如以下代码所示。

978-7-111-42852-7-Part02-298.jpg

978-7-111-42852-7-Part02-299.jpg

接下来需要在ArticleModel自定义模型中使用函数验证规则来实现title字段验证,如以下代码所示。

978-7-111-42852-7-Part02-300.jpg

如以上代码所示,函数验证规则和正则验证规则是可以同时使用的。函数验证规则需要显式地指定验证附加规则(即function),其中数组元素0表示根据函数的返回值判断该验证规则的成立条件。(www.chuimin.cn)

(3)使用方法验证(callback)

使用callback方法验证和使用函数验证是一样的,不同之处在于callback的验证附加规则是Model类及当前类中的成员方法,而不是一个功能函数,如以下代码所示。

978-7-111-42852-7-Part02-301.jpg

978-7-111-42852-7-Part02-302.jpg

(4)对比表单字段值(confirm)

在会员注册系统中,通常需要重复校验2次密码字段,以确认用户所输入的密码。系统提供了confirm验证规则,用于实现表单中2个字段的校验,如以下代码所示。

978-7-111-42852-7-Part02-303.jpg

(5)验证字段是否等于指定的值(equal)

equal验证规则用于验证指定的表单字段值是否绝对等于指定的值,该值由验证规则所定义,如以下代码所示。

978-7-111-42852-7-Part02-304.jpg

(6)验证字段值范围(in)

in验证附加规则用于验证表单的值是否处于指定的范围内,通常用于验证表单值是否为数字。因为in能够指定范围,所以验证规则可以是一个数组,如以下代码所示。

978-7-111-42852-7-Part02-305.jpg

(7)验证字段值是否唯一(unique)

在会员注册系统中,通常在用户输入用户名或者邮箱时,需要使用查询语句查询输入的用户名或邮箱是否已经存在于数据表,如果存在则终止提交。这对于完善数据和提高数据的安全性是非常有效的。使用附加规则unique将变得简单,开发人员不需要编写查询代码,即可轻松地实现字段查询及校验,如以下代码所示。

978-7-111-42852-7-Part02-306.jpg

978-7-111-42852-7-Part02-307.jpg

需要注意的是,判断字段值是否唯一,通常情况下需要配合Ajax实现。不仅unique需要如此,其他的验证规则也一样,以提高用户体验。

3.使用验证规则

一旦在自定义模型中配置验证规则之后,基本上就完成了数据校验所需要的步骤。在动作中只需要使用D函数调用自定模型即可,系统在插入数据前会自动进行表单验证。如以下代码所示。

978-7-111-42852-7-Part02-308.jpg

需要注意的是,要使用表单验证,需要使用create方法创建数据。