thinkPHP自动验证机制详解


Posted in PHP onDecember 05, 2016

本文实例讲述了thinkPHP自动验证机制。分享给大家供大家参考,具体如下:

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

1.验证字段

需要验证的表单字段名称,这个字段不一定是数据库字段,也可以是表单的一些辅助字段,例如确认密码和验证码等等。有个别验证规则和字段无关的情况下,验证字段是可以随意设置的,例如expire有效期规则是和表单字段无关的。

2.验证规则

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

3.错误提示

用于验证失败后的提示信息定义

4.验证条件

包含下面几种情况:

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

5.附加规则

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

regex 正则验证,定义的验证规则是一个正则表达式(默认)
function函数验证,定义的验证规则是一个函数名
callback方法验证,定义的验证规则是当前模型类的一个方法
confirm验证表单中的两个字段是否相同,定义的验证规则是一个字段名
equal 验证是否等于某个值,该值由前面的验证规则定义
in验证是否在某个范围内,定义的验证规则必须是一个数组
length验证长度,定义的验证规则可以是一个数字(表示固定长度)或者数字范围(例如3,12 表示长度从3到12的范围)
between验证范围,定义的验证规则表示范围,可以使用字符串或者数组,例如1,31或者array(1,31)
expire验证是否在有效期,定义的验证规则表示时间范围,可以到时间,例如可以使用 2012-1-15,2013-1-15 表示当前提交有效期在2012-1-15到2013-1-15之间,也可以使用时间戳定义
ip_allow 验证IP是否允许,定义的验证规则表示允许的IP地址列表,用逗号分隔,例如 201.12.2.5,201.12.2.6
ip_deny 验证IP是否禁止,定义的验证规则表示禁止的ip地址列表,用逗号分隔,例如201.12.2.5,201.12.2.6
unique 验证是否唯一,系统会根据字段目前的值查询数据库来判断是否存在相同的值。

6.验证时间

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

示例

protected $_validate = 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'), // 自定义函数验证密码格式
);

必须结合create()使用

$User = D("User"); // 实例化User对象
if (!$User->create()){
  // 如果创建失败 表示验证没有通过 输出错误提示信息
exit($User->getError());
}else{
  // 验证通过 可以进行其他数据操作
}

项目实例

//自动验证
protected $_validate = array (
    array('name', 'require', '姓名不能为空!', 1, '', 3),
    array('tel', 'require', '手机号不能为空!', 1, '', 3),
    array('password', 'require', '密码不能为空!', 1, '', 1),
    array('email', 'require', '邮箱不能为空!', 1, '', 3),
    array('ID_number', 'require', '身份证号不能为空!', 1, '', 3),
    array('ID_positive', 'require', '身份证正面照不能为空!', 1, '', 1),
    array('ID_opposite', 'require', '身份证反面照不能为空!', 1, '', 1),
    array('ID_handle', 'require', '手持身份证照不能为空!', 1, '', 1),
    array('bankcard', 'require', '银行卡照片不能为空!', 1, '', 1),
    array('openbank', 'require', '开户行不能为空!', 1, '', 3),
    array('accountname', 'require', '银行账户名不能为空!', 1, '', 3),
    array('bankaccount', 'require', '银行账户号不能为空!', 1, '', 3),
    array('tel', '/^\d{11}$/', '手机号不合法!', 1, 'regex', 3),
    array('email', 'email', '邮箱不合法!', 1, '', 3),
    array('ID_number', '/^(\d{15}$|^\d{18}$|^\d{17}(\d|X|x))$/', '身份证号不合法!', 1, 'regex', 3),
    array('tel', '', '手机号已经存在!', 1, 'unique', 3), // 新增修改时候验证tel字段是否唯一
    array('email', '', '邮箱已经存在!', 1, 'unique', 3), // email唯一
    array('ID_number', '', '身份证号已经存在!', 1, 'unique', 3), // 身份证号唯一
);

说明,只要定义了Model,在任何地方调用,都会进行验证。很方便。

必须是D方法,才会有效。M方法不会触发自动验证。

希望本文所述对大家基于ThinkPHP框架的PHP程序设计有所帮助。

PHP 相关文章推荐
php在线生成ico文件的代码
Oct 09 PHP
备份mysql数据库的php代码(一个表一个文件)
May 28 PHP
php文字水印和php图片水印实现代码(二种加水印方法)
Dec 25 PHP
PHP获取客户端真实IP地址的5种情况分析和实现代码
Jul 08 PHP
国产PHP开发框架myqee新手快速入门教程
Jul 14 PHP
访问编码后的中文URL返回404错误的解决方法
Aug 20 PHP
php实现图片上传并利用ImageMagick生成缩略图
Mar 14 PHP
Zend Framework教程之Zend_Form组件实现表单提交并显示错误提示的方法
Mar 21 PHP
php+webSoket实现聊天室示例代码(附源码)
Feb 17 PHP
php静态成员方法和静态的成员属性的使用方法
Oct 26 PHP
laravel按天、按小时,查询数据的实例
Oct 09 PHP
PHP常用字符串输出方法分析(echo,print,printf及sprintf)
Mar 09 PHP
thinkPHP中_initialize方法实例分析
Dec 05 #PHP
php版微信自定义回复功能示例
Dec 05 #PHP
thinkPHP中配置的读取与C方法详解
Dec 05 #PHP
PHP实现微信JS-SDK接口选择相册及拍照并上传的方法
Dec 05 #PHP
thinkPHP js文件中U方法不被解析问题的解决方法
Dec 05 #PHP
thinkPHP中验证码的简单实现方法
Dec 05 #PHP
php获取当前月与上个月月初及月末时间戳的方法
Dec 05 #PHP
You might like
在CentOS上搭建LAMP+vsftpd环境的简单指南
2015/08/01 PHP
PHP实现加密文本文件并限制特定页面的存取的效果
2016/10/21 PHP
PHP中call_user_func_array回调函数的用法示例
2016/11/26 PHP
Array.slice()与Array.splice()的返回值类型
2006/10/09 Javascript
javascript类继承机制的原理分析
2009/09/12 Javascript
javascript 节点遍历函数
2010/03/28 Javascript
javascript中的107个基础知识收集整理 推荐
2010/03/29 Javascript
DWR实现模拟Google搜索效果实现原理及代码
2013/01/30 Javascript
js中widow.open()方法使用详解
2013/07/30 Javascript
js获得当前时区夏令时发生和终止的时间代码
2014/02/23 Javascript
JqueryMobile动态生成listView并实现刷新的两种方法
2014/03/05 Javascript
JavaScript弹出对话框的三种方式
2016/03/23 Javascript
微信页面弹出键盘后iframe内容变空白的解决方案
2017/09/20 Javascript
mac中利用NVM管理不同node版本的方法详解
2017/11/08 Javascript
详解layui弹窗父子窗口之间传参数的方法
2018/01/16 Javascript
node.js读取Excel数据(下载图片)的方法示例
2018/08/02 Javascript
微信小程序实现星星评价效果
2018/11/02 Javascript
JS实现求字符串中出现最多次数的字符和次数示例
2019/07/05 Javascript
浅析Vue 防抖与节流的使用
2019/11/14 Javascript
js 数据类型判断的方法
2020/12/03 Javascript
python删除列表内容
2015/08/04 Python
解决python 上传图片限制格式问题
2019/10/30 Python
Python pyautogui模块实现鼠标键盘自动化方法详解
2020/02/17 Python
好莱坞百老汇御用王牌美妆:Koh Gen Do 江原道
2018/04/03 全球购物
NBA德国官方网上商店:NBA Store德国
2018/04/13 全球购物
编写类String 的构造函数、析构函数和赋值函数
2012/09/09 面试题
诺思信科技(南京)有限公司.NET笔试题答案
2013/07/06 面试题
应聘医药代表职位求职信
2013/10/21 职场文书
争做文明公民倡议书
2014/08/29 职场文书
2014国庆黄金周超市促销活动方案
2014/09/21 职场文书
2015年安全保卫工作总结
2015/05/14 职场文书
《黑岩★★射手 DAWN FALL》BD发售宣传CM公开
2022/04/04 日漫
CSS中float高度塌陷问题的四种解决方案
2022/04/18 HTML / CSS
Java线程的6种状态与生命周期
2022/05/11 Java/Android
redis protocol通信协议及使用详解
2022/07/15 Redis
Apache SkyWalking 监控 MySQL Server 实战解析
2022/09/23 Servers