ThinkPHP经过了六年的发展,当前最新版本为3.0。最新版本提供了NoSQL、云技术、分布式支持,使得ThinkPHP的功能更加完善,能够满足大型Web应用的开发需求。ThinkPHP定位于轻量级,快速和简单是该框架的主要特点,这在本书后面的章节内容中将会明显地感受到。接下来首先对ThinkPHP处理MVC的流程作一个简单的介绍,加深对ThinkPHP的直观认识。......
2023-11-04
数据验证是数据插入数据表前一个重要的步骤,甚至可以说是必须要做的一个步骤。不仅PHP应用如此,其他语言类型的应用也如此。因为数据验证关系到数据的完整性和规范性,所以数据验证需要开发人员认真调试。
传统的PHP开发,一般首先在视图用使用JavaScript或Jquery等脚本进行初步的表单验证,然后在后台使用PHP正则或者字符处理函数对表单数据进行验证,这无疑是很好的处理方式,但是由于编写正则需要额外的知识,并且如果所有字段都使用正则或函数来处理,难免会影响开发效率,尤其在表单字段众多时更是值得注意。ThinkPHP提供了简单、易用的表单字段验证处理功能,能够极大地提高开发效率。接下来将介绍系统内置的验证规则,结合前端验证脚本,可以快速地实现友好、强大的数据验证功能。
1.定义验证规则
定义数据验证规则,需要在自定模型中进行定义。和其他数据处理方式一样,数据验证也是使用成员属性值来实现的,配置数据验证的属性为$_validate,该属性值是一个多维数据,格式如以下代码所示。
需要说明的是,系统提供的验证方式只是包装和简化了现有的PHP验证方式,例如PHP正则、字符串处理函数等,所以无论是灵活性还是可靠性两者都是一样的。针对数据表单特性,系统一共提供了7种数据验证规则,如表8-1所示。
表8-1 系统内置的表单验证规则
2.配置验证规则
验证规则本身支持验证错误提示(支持多语言),所以在ThinkPHP中使用表单验证规则非常简单。为了方便演示,这里将继续使用tpk_article和tpk_user数据表作为验证数据表,对应的模板表单代码如下所示。
读者也可以使用其他数据表来演示,只需要注意字段名称即可。下面将分别介绍系统内置的7种验证规则。
(1)regex正则验证
正则验证是系统最常用的一种表单字段验证方式,也是默认的验证方式。例如判断表单字段是否为空,系统使用的就是正则验证。正则验证的关键字为require,如以下代码所示。
正则验证的本质是正则表达式,系统允许开发人员使用数组配置代替将难以记牢的正则表达式,有效地提高开发效率。
(2)使用函数验证(function)
正则验证只适用于已有的系统内置验证规则,如果验证规则不存在,验证将失效。所以正则验证的扩展性是有限的。配合函数验证,将能够实现更加灵活的扩展验证。函数验证通常是指使用自定义函数实现验证。假设需要验证标题字符数量,如果字数大于2则允许提交,否则将终止表单提交。步骤如下。
首先需要在Common/common.php中定义自定义函数,该函数用于计算中文字符的数量,如以下代码所示。
接下来需要在ArticleModel自定义模型中使用函数验证规则来实现title字段验证,如以下代码所示。
如以上代码所示,函数验证规则和正则验证规则是可以同时使用的。函数验证规则需要显式地指定验证附加规则(即function),其中数组元素0表示根据函数的返回值判断该验证规则的成立条件。(www.chuimin.cn)
(3)使用方法验证(callback)
使用callback方法验证和使用函数验证是一样的,不同之处在于callback的验证附加规则是Model类及当前类中的成员方法,而不是一个功能函数,如以下代码所示。
(4)对比表单字段值(confirm)
在会员注册系统中,通常需要重复校验2次密码字段,以确认用户所输入的密码。系统提供了confirm验证规则,用于实现表单中2个字段的校验,如以下代码所示。
(5)验证字段是否等于指定的值(equal)
equal验证规则用于验证指定的表单字段值是否绝对等于指定的值,该值由验证规则所定义,如以下代码所示。
(6)验证字段值范围(in)
in验证附加规则用于验证表单的值是否处于指定的范围内,通常用于验证表单值是否为数字。因为in能够指定范围,所以验证规则可以是一个数组,如以下代码所示。
(7)验证字段值是否唯一(unique)
在会员注册系统中,通常在用户输入用户名或者邮箱时,需要使用查询语句查询输入的用户名或邮箱是否已经存在于数据表,如果存在则终止提交。这对于完善数据和提高数据的安全性是非常有效的。使用附加规则unique将变得简单,开发人员不需要编写查询代码,即可轻松地实现字段查询及校验,如以下代码所示。
需要注意的是,判断字段值是否唯一,通常情况下需要配合Ajax实现。不仅unique需要如此,其他的验证规则也一样,以提高用户体验。
3.使用验证规则
一旦在自定义模型中配置验证规则之后,基本上就完成了数据校验所需要的步骤。在动作中只需要使用D函数调用自定模型即可,系统在插入数据前会自动进行表单验证。如以下代码所示。
需要注意的是,要使用表单验证,需要使用create方法创建数据。
有关PHP MVC开发实战的文章
ThinkPHP经过了六年的发展,当前最新版本为3.0。最新版本提供了NoSQL、云技术、分布式支持,使得ThinkPHP的功能更加完善,能够满足大型Web应用的开发需求。ThinkPHP定位于轻量级,快速和简单是该框架的主要特点,这在本书后面的章节内容中将会明显地感受到。接下来首先对ThinkPHP处理MVC的流程作一个简单的介绍,加深对ThinkPHP的直观认识。......
2023-11-04
在这一过程中,开发人员需要对URL请求进行处理,例如安全检测、URL映射等,只能在运算进行前使用特定的文件进行拦截或处理。ThinkPHP的行为机制本质上是一种URL拦截处理机制,行为的引入把过去没有生命周期概念的PHP应用添加了生命周期的概念。图11-8 ThinkPHP行为执行过程内置行为是确保系统能够运行的基础,一般情况下开发人员不需要扩展内置的行为。如图11-8所示,项目首先执行的行为标签是app_init,一直到app_end标签,中间的标签有些有对应的行为,有些没有。......
2023-11-04
接下将继续以ThinkPHP 3.0为例,详细介绍在MVC的中SOAP服务端开发,步骤如下。然后在home项目中创建api控制器,该控制器用于SOAP服务绑定,首先创建article.wsdl服务绑定,如以下代码所示。图12-15 WSDL绑定出错接下来需要在article.wsdl文件中创建相应的操作及服务绑定。并且建立http://tp.localhost/index.php/api/Article服务绑定地址。至此,一个article.wsdl SOAP服务就创建完成了,接下来就可以使用专业的SOAP测试工具或者在PHP中直接调用该服务。......
2023-11-04
和其他PHP MV框架一样,要使用ThinkPHP必须首先要安装和部署框架文件。ThinkPHP支持多种数据库驱动,包括PDO套件,接下来将通过ThinkPHP实现一个简单的MVC应用。这里将下载的版本为ThinkPHP 3.0,解压后ThinkPHP目录结构如图4-22所示。图4-23 ThinkPHP成功初始化项目......
2023-11-04
事实上,ThinkPHP已经完美地解决了读写分离功能,本节将会详细介绍。本例中主数据库的ip地址为192.168.2.1;从数据库的ip地址为192.168.2.2,读者可以使用虚拟机来模拟上述环境。配置完成后,保存配置文件,重启MySQL数据库。接下来将结合ThinkPHP实现数据的读写分离。ThinkPHP提供了完善的读写分离功能,开发人员不需要手动切换数据库。......
2023-11-04
对于普通的开发者而言,最需要关注Lib目录及Extend目录,接下来分别进行介绍。由于ThinkPHP遵循Apache 2.0协议,意味着PHP开发人员可以通过修改ThinkPHP源代码,以便更适合自己的开发需求,这就要求开发人员必须要对Extend目录下的扩展类库要有深入的认识。......
2023-11-04
将数据全部缓存到Memcached之后,程序在获取数据时并不直接连接数据库,而是连接缓存服务器。服务器关机后,内存中的数据也将会被清空,所以尽量搭建可容灾的Memcached服务器集群。......
2023-11-04
早期的数据验证码是为了防止自动发帖软件而采取的一项技术,它能够有效地防止非人为的发帖行为,提高数据的安全性和完整性。大体上验证码共分为2类,即使用数字或字母的国际化验证码和使用中文汉字的验证码。改变buildImageVerify方法参数可以改变验证码的显示样式。表8-2 buildImageVerify方法参数生成普通验证码非常简单,只需要使用引入系统扩展类即可。......
2023-11-04
相关推荐