tinkphp中的自动验证
tinkphp是国内非常流行的一个开源框架,国内大小公司都在用的框架。对于初学的好多同学感觉不太好上手,其实并没没有大家想的那么复杂。自动验证功能是thinkphp提高的一种数据验证方法,分为动态和静态两种方式。但是无论什么验证方式,验证的规则都是一样的。具体的规则如下:
规则是一个二维数组的格式 array(
array("验证字段","验证规则","错误提示","验证条件","附加规则","验证时间"),
array("验证字段","验证规则","错误提示","验证条件","附加规则","验证时间")
);
数据验证的前三条是必须的,后三条是可选的。
1. 验证字段可以是数据库字段,也可以是自己表单定义的字段。(必须)
2. 验证规则可以使用正则,也可以使用一些系统内置的方法,例如:require 字段必须,email邮箱,url地址等。(必须)
3. 提示信息就是验证失败后提示的内容。(必须)
4. 验证条件seft::EXITS_VALIDATE 或者 0 存在字段就验证 seft::MUST_VALIDATE 或者1 必须验证 seft::VALUE_VALIDATE 或者2 值不为空验证。(可选)
5. 附加规则配合规则使用,包括一些规则,例如:regex,验证规则必须是一个正则表达式。function,验证规则必须是一个函数。unique,验证是否唯一。更多的可以去thinkphp开发文档去看。(可选)
6. 验证时间 MODEL_INSERT 或者1 添加数据验证, MODEL_UPDATE 或者2 编辑数据验证, MODEL_BOTH 或者3 都验证。(可选)
知道了规则,我们可以自己尝试写一写,首先可以先一个静态的:
class UserModel extends Model{
protected $_validate = array(
array("verify","require","验证码不能为空!");
array("name"," ","用户名已存在!",0,unique,1); //新增是验证用户是否唯一
array("value",array(1,2,3),"值不在范围内!",2,in); //值是否在范围内
array("repassword","password","密码不正确!",0 ,confirm) //验证确认密码是否和密码一致
array("password","checkpasswd","密码格式不正确",0 ,function) //验证密码格式格式是否正确
);
}
定义好验证规则以后,直接就可以用了:
$user = D("User");
$data = getData(); /获取的表单数据
if(!$user->create()){
//没有通过验证
exit($user->getErro());
}
默认情况下,create方法是对表单提交的POST数据进行自动验证,如果你的数据来源不是表单post,仍然也可以进行自动验证。
动态验证:
动态验证就比较简单了,将上面的规则赋值给一个变量,把变量赋值给validate()方法中,如下:
- $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"); // 实例化User对象
- if (!$User->validate($rules)->create()){
- // 如果创建失败 表示验证没有通过 输出错误提示信息
- exit($User->getError());
- }else{
- // 验证通过 可以进行其他数据操作
- }
tinkphp中的自动验证的更多相关文章
- model中的自动验证 $_validate $_auto
普通模式: <?php class UserModel extends RelationModel{ /**自动验证**/ protected $_validate = array( /**ar ...
- Thinkphp 中的自动验证 上一篇有例子
说明,只要定义了Model,在任何地方调用,都会进行验证.很方便. 必须是D方法,才会有效.M方法不会触发自动验证. 说明:这里没练习静态自动验证:如果用到静态验证首先自定义一个控制器,再在Model ...
- thinkphp中的自动验证
array(验证字段,验证规则,错误提示,[验证条件,附加规则,验证时间]) 1.验证字段 需要验证的表单字段名称,这个字段不一定是数据库字段,也可以是表单的一些辅助字段,例如确认密码和验证码等等.有 ...
- thinkphp自动验证---$_validate
thinkphp中的自动验证 array(验证字段,验证规则,错误提示,[验证条件,附加规则,验证时间]) 1.验证字段 需要验证的表单字段名称,这个字段不一定是数据库字段,也可以是表单的一些辅助字段 ...
- ThinkPHP 自动验证与自动填充无效可能的原因(转)
自动验证与自动填充是在使用ThinkPHP时经常用到的功能,但偶尔会遇到自动验证与自动填充无效的情况,本文就ThinkPHP 自动验证与自动填充无效可能的原因做一些分析. create() Think ...
- ThinkPHP 自动验证与自动填充无效可能的原因
原文链接:http://www.5idev.com/p-thinkphp_validate_auto_Invalid.shtml 自动验证与自动填充是在使用ThinkPHP时经常用到的功能,但偶尔会遇 ...
- thinkPHP中服务器端的验证
<?php class UserModel extends Model{ //user是表的名称 必须以表名开始,继承Model类 protected $_validate=array( //a ...
- thinkphp自动验证中的静态验证和动态验证和批量验证
1.静态定义 在模型类里面预先定义好该模型的自动验证规则,我们称为静态定义. 举例说明,我们在模型类里面定义了$_validate属性如下: class UserModel extends Model ...
- ThinkPHP中create()方法自动验证表单信息
自动验证是ThinkPHP模型层提供的一种数据验证方法,可以在使用create创建数据对象的时候自动进行数据验证. 原理: create()方法收集表单($_POST)信息并返回,同时触发表单自动验证 ...
随机推荐
- bytes,packet区别 字节数据包
“包”(Packet)是TCP/IP协议通信传输中的数据单位,一般也称“数据包”.字节(Byte): 字节是通过网络传输信息(或在硬盘或内存中存储信息)的单位. 字节是计算机信息技术用于计量存储容量和 ...
- elasticsearch(3) curl命令
curl 操作http的get/post/put/delete CURL 命令参数-a/--append 上传文件时,附加到目标文件-A/--user-agent <string> 设置用 ...
- LAMP 3.1 mysql的root密码重置
给mysql设置密码 /usr/local/mysql/bin/mysql -uroot 可以直接登录mysql 设置密码 /usr/local/mysql/bin/mysqladmin -uroot ...
- springboot启动异常java.lang.NoSuchFieldError: DEFAULT_INCOMPATIBLE_IMPROVEMENTS
解决办法一 yml或者Properties文件中配置 spring.freemarker.check-template-location=false 解决办法二 @SpringBootApplicat ...
- MyBatis中动态SQL语句完成多条件查询
一看这标题,我都感觉到是mybatis在动态SQL语句中的多条件查询是多么的强大,不仅让我们用SQL语句完成了对数据库的操作:还通过一些条件选择语句让我们SQL的多条件.动态查询更加容易.简洁.直观. ...
- C++——explicit
explicit构造函数是用来防止隐式转换的.请看下面的代码: class Test1 { public: Test1(int n) { num=n; }//普通构造函数 private: int n ...
- MyBatis02 MyBatis基础知识之Mapper映射器
1 Mapper映射器是什么 是符合映射文件要求的接口 接口要求 a. 方法名要与sql的id一致. b. 方法的参数类型要与parameterType一致. c. 方法的返回类型要与resultTy ...
- 业务逻辑:shiro框架的功能实现
思路:分别在web.xml配置过滤器以及在applicationContext.xml去配置 实现步骤:1.在pom.xml里引入shiro的坐标 2.在web.xml里配置shiro过滤器 3.在a ...
- Windows中lib和DLL区别和使用
本文转载自:http://www.cppblog.com/amazon/archive/2009/09/04/95318.html 共有两种库:一种是LIB包含了函数所在的DLL文件和文件中函数位置的 ...
- ZROI #88
传送门 分析 我们考虑把每个A[i]考虑为山峰的高度,每次的B考虑为海平面 于是我们知道对于A[i]和A[i-1],如果A[i-1]<A[i]则在A[i-1]<B<=A[i]时会使陆 ...