自动验证是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函数实例化模型就可以
相关推荐
3. 自动路由:ThinkPHP支持自动路由,可以根据URL规则自动匹配到对应的控制器和方法,简化了路由配置。 二、 Bjyblog系统特点 1. 用户管理:作为一个个人博客系统,用户登录、注册是基础功能。 Bjyblog实现了用户...
3. **自动验证和填充**:ThinkPHP5提供了数据验证机制,可以对用户输入进行验证,防止非法数据入库。同时,自动填充功能可以简化数据处理,例如自动设置创建和更新时间。 4. **数据库操作**:框架内置了强大的...
在这个项目中,Thinkphp6.0主要负责后端逻辑处理,包括用户认证、数据验证、数据库操作以及与前端的接口通信。 Vue.js则是一款现代化的前端JavaScript框架,以其灵活性和易用性受到开发者的青睐。在本源码中,Vue....
2. **ThinkPHP5**:这是一个快速、稳定且易于使用的PHP开发框架,它提供了模型-视图-控制器(MVC)结构,以及丰富的内置功能,如路由、自动加载、数据库操作等,使得开发者能够更高效地构建Web应用。 3. **图书管理...
手册详细讲解了服务容器、中间件、事件系统、自动加载、模板引擎、表单验证、缓存管理、日志处理、异常处理和错误处理等核心组件。此外,还包括了模型层的深入理解,如关联关系、事务处理以及数据库优化策略。 3. *...
一、开发语言——ThinkPHP5 ThinkPHP5是PHP领域的一款热门开源框架,以其简洁、高效和灵活的设计理念受到开发者喜爱。它遵循MVC(Model-View-Controller)设计模式,提供强大的路由、中间件、服务容器等功能,使得...
7. **表单验证**:掌握如何使用ThinkPHP5的内置验证类进行表单数据的验证,确保输入数据的安全性。 8. **错误处理与日志记录**:了解ThinkPHP5的异常处理机制,以及如何配置和使用日志系统,以便于调试和优化代码。...
- **自动验证**:对请求的数据进行自动验证,保证数据的完整性和准确性。 - **模型层优化**:针对移动场景,优化了数据库操作,降低了网络延迟。 3. 使用TPM构建APP后端服务: - **安装与配置**:首先,你需要在...
8. **模板引擎**:理解ThinkPHP5的模板引擎——Blade,如何编写模板文件,以及变量、条件语句、循环等基本语法。 9. **控制器和视图**:深入控制器的生命周期,理解如何从控制器跳转到视图,以及视图中的变量传递和...
在模型层,ThinkPHP3.1.2引入了数据验证和自动完成机制,可以有效地防止非法数据的入库,同时简化了数据处理的流程。此外,其支持关联模型,使得一对一、一对多、多对多等复杂关系的处理变得简单。 在视图层,...
其核心特性包括:模型层自动验证和填充、控制器自动调度、视图模板引擎、以及强大的日志和错误处理机制等,这些都为开发电子商务网站提供了便利。 二、项目初始化与环境搭建 1. 安装Composer:ThinkPHP项目通常依赖...
### TP自动验证——ThinkPHP框架中的数据操作与模型管理 #### 概述 ThinkPHP框架是一种广泛应用于PHP项目开发的轻量级MVC框架,它提供了丰富的特性支持,旨在简化开发流程并提升开发效率。本篇文章主要围绕TP框架...
总的来说,这是一个集成了卡密生成、验证和管理功能的PHP系统,使用了ThinkPHP框架,并且提供了一套简洁的后台管理系统。对于需要在线销售或管理卡密产品的商家来说,这样的系统能有效地管理和保护其产品激活流程。
框架内的模型层(Model)是与数据库交互的核心,支持自动验证和填充,可以方便地进行数据校验和处理。同时,ThinkPHP5.0引入了Service服务层,用于封装复杂的业务逻辑,提高代码复用性和可维护性。 视图(View)方面,...
它的主要特点包括URL路由、模型绑定、自动验证、事务处理等,能帮助开发者高效地构建Web应用。 2. **MVC模式**:是一种软件设计模式,将业务逻辑(Model)、数据呈现(View)和用户交互(Controller)分离,使得...
【标题】"Discuz与ThinkPHP同步登录"涉及的核心知识点主要是在两个独立的Web系统——Discuz和ThinkPHP之间实现用户身份验证的无缝对接。这种功能通常通过Ucenter实现,Ucenter是Comsenz公司开发的一个用户中心服务,...
2. 快速开发:ThinkPHP提供了丰富的内置函数和助手方法,如自动验证、自动完成、自动过滤等,极大地简化了开发过程。同时,其强大的路由规则和模版引擎使得页面跳转和渲染更加灵活。 3. 错误和日志:ThinkPHP有完善...
本项目——“基于ThinkPHP5的简易学生论坛”,是一个适合毕设或课设的实践项目,旨在帮助初学者理解和掌握Web应用开发的关键技术。下面将对该项目的核心知识点进行详细解析。 首先,我们要了解ThinkPHP5(简称TP5)...
在ThinkPHP5.0中,最重要的是其核心设计理念——"简洁、快速、模块化"。这个版本引入了许多新特性,以提高开发效率和代码可维护性。首先,路由系统得到了显著增强,支持RESTful API设计,使得构建Web服务更加灵活。...
标签 "thinkphp响应式建筑设计装" 明确指出了这个项目的核心技术——ThinkPHP框架,以及其应用场景——建筑设计与装饰领域。ThinkPHP是中国较为流行的PHP框架之一,以其简单易用、高效稳定的特点受到开发者青睐,...