`

ThinkPHP——自动验证

阅读更多

自动验证是ThinkPHP模型层提供的一种数据验证方法,可以在使用create创建对象的时候自动进行数据验证。

一、验证规则

数据验证可以进行数据类型,业务规则,安全判断等方面的验证操作。

数据验证有两种方式:

1.静态方式:在模型类里面通过$_validate属性定义验证规则。

2.动态方式:使用模型类的validate方法动态创建自动验证规则。

无论是哪种方式,验证规则的定义是统一的,定义格式为:

 

array(
	array(验证字段1,验证规则,错误提示,[验证条件,附加规则,验证时间]),
	array(验证字段1,验证规则,错误提示,[验证条件,附加规则,验证时间]),
		...
	);

 说明:

验证字段(必须)

需要验证的表单字段名称,这个字段不一定是数据字段,也可以是表单的一些辅助字段,例如确认密码和验证码等。

验证规则(必须)

要进行验证的规则,需要结合附加规则,如果在使用正则验证的附加规则情况下,系统内置了一些常用正则验证规则,可以直接作为验证规则使用,包括:require 字段必须,email 邮箱,url URL地址,currency 货币,number 数字。

提示信息(必须)

用于验证失败后的提示信息定义 验证条件(可选) 包含下面几种情况

self::EXISTS_VALIDATE或者0 存在字段就验证(默认)
self::MUST_VALIDATE或者1 必须验证
self::VALUE_VALIDATE或者2	值不为空的时候验证

附加规则(可选)

配合验证规则使用,包括下面一些规则:

regex 正则验证,定义的验证规则是一个正则表达式(默认)

function 函数验证,定义的验证规则是一个函数

callback 方法验证,定义的验证规则是当前模型类的一个方法

confirm 验证表单中的两个字段是否相同,定义的规则是一个字段名

equal 验证是否等于某个值,该值由前面的验证规则定义

notequal 验证是否不等于某个值,该值由前面的验证规则定义(3.1.2版本新增)

in 验证是否在某个范围内,定义的验证规则可以是一个数组或者逗号分割的字符串

notin 验证是否不在某个范围内,定义的验证规则可以是一个数组或者逗号分割的字符串(3.1.2版本新增)

length 验证长度

between notbetween expire ip_allow 验证IP是否允许

ip_deny 验证IP是否禁止

unique 验证是否唯一

验证时间(可选)

self::MODEL_INSERT 或者1 新增数据时候验证
self::MODEL_UPDATE 或者2 编辑数据时候验证
self::MODEL_BOTH 或者3 全部情况下验证(默认)

 二、静态定义

在模型类里面预先定义好该模型的自动验证规则,称为静态定义。

在模型类里面定义了$_validate属性如下:

<?php 
	namespace Home\Model;
	use Think\Model;
	class UserModel extends Model{
		protected $_validate = array(
			array('name','require','用户名不能为空'),  
			array('name','','名称已经存在!',0,'unique',1),
              //在新增的时候验证name字段是否唯一
			array('value',array(1,2,3),'值的范围不正确',2,'in'), 
             //当值不为空的时候判断是否在一个范围内
			array('repassword','password','确认密码不正确',0,'confirm'), 
             //验证确密码是否和密码一致
			array('password','checkPwd','密码格式不正确',0,'function'), 
            //自定义函数验证密码格式
		);
	}
	 ?>	

定义好验证规则后,就可以在使用create方法创建数据对象的时候自动调用

 <?php 
		...
	 $User = D('User');
 	$data = I('post.');  //获取表单post的所有数据
 	if(!$User->create($data)){
 		exit($User->getError());
 	}else{
 		$this->show("恭喜你!");
 	}
 ?>

静态定义方式因为必须定义模型类,所以只能用D函数实例化模型

三、动态验证

如果采用动态验证的方式,就比较灵活,可以根据不同的需要,在操作同一个模型的时候使用不同的验证规则

<?php 
	$rules = array(
		array('verify','require','验证码必须!'), 
		array('name','','名称已经存在!',0,'unique',1), 
               //在新增的时候验证name字段是否唯一
		array('value',array(1,2,3),'值的范围不正确',2,'in'),
              //当值不为空的时候判断是否在一个范围内
		array('repassword','password','确认密码不正确',0,'confirm'),
              //验证确密码是否和密码一致
		array('password','checkPwd','密码格式不正确',0,'function'), 
             //自定义函数验证密码格式
	);

	$User = M('User');
	if($User->validate($rules)->create()){
		exit($User->getError());
	}else{
		$this->show("恭喜你!");
	}
 ?>

动态验证不依赖模型类的定义,所以通常用M函数实例化模型就可以

 

分享到:
评论

相关推荐

    thinkphp-bjyblog, 基于thinkphp开发的的个人博客系统thinkphp-bjyblog.zip

    3. 自动路由:ThinkPHP支持自动路由,可以根据URL规则自动匹配到对应的控制器和方法,简化了路由配置。 二、 Bjyblog系统特点 1. 用户管理:作为一个个人博客系统,用户登录、注册是基础功能。 Bjyblog实现了用户...

    PHP实例开发源码——基于ThinkPHP5图书管理系统demo.zip

    3. **自动验证和填充**:ThinkPHP5提供了数据验证机制,可以对用户输入进行验证,防止非法数据入库。同时,自动填充功能可以简化数据处理,例如自动设置创建和更新时间。 4. **数据库操作**:框架内置了强大的...

    PHP实例开发源码——Thinkphp6.0+vue框架开发个人虚拟物品发卡网站源码.zip

    在这个项目中,Thinkphp6.0主要负责后端逻辑处理,包括用户认证、数据验证、数据库操作以及与前端的接口通信。 Vue.js则是一款现代化的前端JavaScript框架,以其灵活性和易用性受到开发者的青睐。在本源码中,Vue....

    PHP实例开发源码——双鱼林基于ThinkPHP5图书管理系统demo.zip

    2. **ThinkPHP5**:这是一个快速、稳定且易于使用的PHP开发框架,它提供了模型-视图-控制器(MVC)结构,以及丰富的内置功能,如路由、自动加载、数据库操作等,使得开发者能够更高效地构建Web应用。 3. **图书管理...

    thinkphp5.0.rar

    手册详细讲解了服务容器、中间件、事件系统、自动加载、模板引擎、表单验证、缓存管理、日志处理、异常处理和错误处理等核心组件。此外,还包括了模型层的深入理解,如关联关系、事务处理以及数据库优化策略。 3. *...

    ThinkPHP5医疗系统源码.7z

    一、开发语言——ThinkPHP5 ThinkPHP5是PHP领域的一款热门开源框架,以其简洁、高效和灵活的设计理念受到开发者喜爱。它遵循MVC(Model-View-Controller)设计模式,提供强大的路由、中间件、服务容器等功能,使得...

    ThinkPHP5快速入门 PDF格式.zip

    7. **表单验证**:掌握如何使用ThinkPHP5的内置验证类进行表单数据的验证,确保输入数据的安全性。 8. **错误处理与日志记录**:了解ThinkPHP5的异常处理机制,以及如何配置和使用日志系统,以便于调试和优化代码。...

    thinkphp 手机APP模块 TPM

    - **自动验证**:对请求的数据进行自动验证,保证数据的完整性和准确性。 - **模型层优化**:针对移动场景,优化了数据库操作,降低了网络延迟。 3. 使用TPM构建APP后端服务: - **安装与配置**:首先,你需要在...

    ThinkPHP5快速入门-官方-教程-PHP

    8. **模板引擎**:理解ThinkPHP5的模板引擎——Blade,如何编写模板文件,以及变量、条件语句、循环等基本语法。 9. **控制器和视图**:深入控制器的生命周期,理解如何从控制器跳转到视图,以及视图中的变量传递和...

    ThinkPHP3.1.2框架

    在模型层,ThinkPHP3.1.2引入了数据验证和自动完成机制,可以有效地防止非法数据的入库,同时简化了数据处理的流程。此外,其支持关联模型,使得一对一、一对多、多对多等复杂关系的处理变得简单。 在视图层,...

    基于thinkphp电子商务网站

    其核心特性包括:模型层自动验证和填充、控制器自动调度、视图模板引擎、以及强大的日志和错误处理机制等,这些都为开发电子商务网站提供了便利。 二、项目初始化与环境搭建 1. 安装Composer:ThinkPHP项目通常依赖...

    TP自动验证

    ### TP自动验证——ThinkPHP框架中的数据操作与模型管理 #### 概述 ThinkPHP框架是一种广泛应用于PHP项目开发的轻量级MVC框架,它提供了丰富的特性支持,旨在简化开发流程并提升开发效率。本篇文章主要围绕TP框架...

    源码_happenn1i_html验证卡密_卡密系统_验证系统_卡密验证_

    总的来说,这是一个集成了卡密生成、验证和管理功能的PHP系统,使用了ThinkPHP框架,并且提供了一套简洁的后台管理系统。对于需要在线销售或管理卡密产品的商家来说,这样的系统能有效地管理和保护其产品激活流程。

    ThinkPHP5.0完全开发手册

    框架内的模型层(Model)是与数据库交互的核心,支持自动验证和填充,可以方便地进行数据校验和处理。同时,ThinkPHP5.0引入了Service服务层,用于封装复杂的业务逻辑,提高代码复用性和可维护性。 视图(View)方面,...

    ThinkPHP共赢天下互助平台理财源码 自适应PC+WAP

    它的主要特点包括URL路由、模型绑定、自动验证、事务处理等,能帮助开发者高效地构建Web应用。 2. **MVC模式**:是一种软件设计模式,将业务逻辑(Model)、数据呈现(View)和用户交互(Controller)分离,使得...

    Discuz与ThinkPHP同步登录

    【标题】"Discuz与ThinkPHP同步登录"涉及的核心知识点主要是在两个独立的Web系统——Discuz和ThinkPHP之间实现用户身份验证的无缝对接。这种功能通常通过Ucenter实现,Ucenter是Comsenz公司开发的一个用户中心服务,...

    基于thinkphp的云课堂后台管理系统

    2. 快速开发:ThinkPHP提供了丰富的内置函数和助手方法,如自动验证、自动完成、自动过滤等,极大地简化了开发过程。同时,其强大的路由规则和模版引擎使得页面跳转和渲染更加灵活。 3. 错误和日志:ThinkPHP有完善...

    基于thinkphp5的简易学生论坛-毕设课设项目.zip

    本项目——“基于ThinkPHP5的简易学生论坛”,是一个适合毕设或课设的实践项目,旨在帮助初学者理解和掌握Web应用开发的关键技术。下面将对该项目的核心知识点进行详细解析。 首先,我们要了解ThinkPHP5(简称TP5)...

    ThinkPHP5.0完全开发手册-.zip

    在ThinkPHP5.0中,最重要的是其核心设计理念——"简洁、快速、模块化"。这个版本引入了许多新特性,以提高开发效率和代码可维护性。首先,路由系统得到了显著增强,支持RESTful API设计,使得构建Web服务更加灵活。...

    thinkphp响应式建筑设计装饰网站模板

    标签 "thinkphp响应式建筑设计装" 明确指出了这个项目的核心技术——ThinkPHP框架,以及其应用场景——建筑设计与装饰领域。ThinkPHP是中国较为流行的PHP框架之一,以其简单易用、高效稳定的特点受到开发者青睐,...

Global site tag (gtag.js) - Google Analytics