自动验证[2]

附加规则expire,设置有效期范围,必须是表单提交有效,可以是时间戳

这时,在 Home/controller/UserController.class.php 中插入

 1 public function add() {
 2             $user=D(‘User‘);
 3
 4             $data[‘user‘]=‘‘;
 5             if($user->create($data)) {
 6                 echo ‘所有字段验证成功‘;
 7             }else {
 8                 var_dump($user->getError());
 9             }
10         }

因为$data[‘user‘]在验证的时候不是验证这里有没有值,而是验证表单提交的时间,而且,如果不是表单提交,直接执行add()函数是没有用的还是会出错。

在 Home/Model/UserModel.class.php 插入以下代码:

 1 <?php
 2 namespace Home\Model;
 3 use Think\Model;
 4
 5 class UserModel extends Model {
 6     protected $_validate= array(
 7         array(‘user‘, ‘2014-1-10,2015-10-10‘, ‘时间已过期‘, 0, ‘expire‘),
 8         );
 9
10 }

这时验证的时间是 ‘2014-1-10,2015-10-10‘ 以内,

然后在index.html(与主目录下的index.php是同级的)插入以下代码:

1 <meta charset="utf-8">
2 <form method="post" action="http://localhost/demo39/index.php/Home/User/add">
3   <p>用户:<input type="text" name="yonghu" /></p>
4   <p>邮箱:<input type="text" name="youxiang" /></p>
5   <input type="submit" value="提交">
6 </form>

注意,这里不要加上输入的时间,

附加规则callback,回调验证

在 Home/controller/UserController.class.php 插入以下代码:

1 public function add() {
2             $user=D(‘User‘);
3             $data[‘user‘]=‘zdp‘;
4             if($user->create($data)) {
5                 echo ‘所有字段验证成功‘;
6             }else {
7                 var_dump($user->getError());
8             }
9         }

然后在 Home/Model/UserModel.class.php 插入验证的代码:

 1 <?php
 2 namespace Home\Model;
 3 use Think\Model;
 4
 5 class UserModel extends Model {
 6     protected $_validate= array(
 7         array(‘user‘, ‘checkLength‘, ‘用户名必须在 3-5 位‘, 0, ‘callback‘, 3,array(3,5)),//v这里的array(3,5)是checkLength内的$min和$maxl两个参数
 8         );
 9     protected function checkLength($str,$min,$max) {
10         preg_match_all("/./", $str, $matches);   //如果验证的是中文,则正则为"/./u",后面的u是utf8编码格式
11         $len =count($matches[0]);
12         if($len<$min||$len>$max) {
13             return false;
14         } else {
15             return true;
16         }
17     }
18
19 }

附加规则function,函数验证

在 Home/Model/UserModel.class.php 内代码为:

1 <?php
2 namespace Home\Model;
3 use Think\Model;
4
5 class UserModel extends Model {
6     protected $_validate= array(
7         array(‘user‘, ‘checkLength‘, ‘用户名必须在 3-5 位‘, 0, ‘function‘, 3,array(3,5)),//v这里的array(3,5)是checkLength内的$min和$maxl两个参数
8         );
9 }

然后在 Common 文件夹下的 Common 文件夹建立 function.php 文件,会自动加载

写入以下代码:

 1 <?php
 2  function checkLength($str,$min,$max) {
 3         preg_match_all("/./", $str, $matches);   //如果验证的是中文,则正则为"/./u",后面的u是utf8编码格式
 4         $len =count($matches[0]);
 5         if($len<$min||$len>$max) {
 6             return false;
 7         } else {
 8             return true;
 9         }
10     }

如果有多个字段都包含错误,默认只显示一个错误。如果想显示全部错误,可以设置属性:

1 protected $patchValidate =  true;

这时在 Home/controller/UserController.class.php 内插入:

 1 public function add() {
 2             $user=D(‘User‘);
 3             $data[‘user‘]=‘‘;
 4             $data[‘email‘] =‘bbbb‘;
 5             if($user->create($data)) {
 6                 echo ‘所有字段验证成功‘;
 7             }else {
 8                 var_dump($user->getError());
 9             }
10         }

然后在 Home/Model/UserModel.class.php 内插入:

 1 <?php
 2 namespace Home\Model;
 3 use Think\Model;
 4
 5 class UserModel extends Model {
 6     protected $_validate= array(
 7         array(‘user‘, ‘require‘, ‘用户名不得为空‘, 0, ‘regex‘, 3),
 8         array(‘email‘, ‘email‘, ‘邮箱格式不正确‘),
 9         );
10     protected $patchValidate = true;
11 }

这时才会将两个错误都显示出来

如果想把错误信息返回给ajax处理,可以是同ajaxReturn()方法返回JSON数据。

1 //返回JSON格式
2 $this->ajaxReturn($user->getError());

这时在原先在 Home/controller/UserController.class.php 使用的错误显示时用的 var_dump($user->getError()); 改为 $this->ajaxReturn($user->getError());

错误信息显示如下:

还有一个就是

1 //1指定新增数据验证,2表示修改,
2  if ($user->create($_POST,1)) {} //一般会自动判断,就是表单提交时根据信息来判断提交来的数据是新增还是修改

三. 动态验证

动态验证就是把验证的规则放在控制器端,这样,在操作的时候比较灵活,缺点就是比较混乱。

 1 public function add() {
 2             $rule = array(
 3                 array(‘user‘,‘require‘,‘用户名不得为空‘),
 4                 );
 5             $user=M(‘User‘);
 6             $data[‘user‘]=‘‘;
 7             $data[‘email‘] =‘123‘;
 8             if($user->validate($rule)->create($data)) {
 9                 echo ‘所有字段验证成功‘;
10             }else {
11                 var_dump($user->getError());
12             }
13         }

这时判定提交的数据必须加上 validate($rule) ,要不然就直接验证为‘所有字段验证成功‘

时间: 2024-10-11 10:43:57

自动验证[2]的相关文章

ThinkPHP中create()方法自动验证

自动验证是ThinkPHP模型层提供的一种数据验证方法,可以在使用create创建数据对象的时候自动进行数据验证. 原理: create()方法收集表单($_POST)信息并返回,同时触发表单自动验证,过滤非法字段, 在控制器中使用create()方法,(返回值为true/false),会自动触发模型类中的$_validate属性(为父类Model中的方法,在子类Model中重写),在$_validate中自定义验证规则(验证规则下面会详细说明),当create()方法没有数据即返回值为fals

AngularJS实现表单手动验证和表单自动验证

AngularJS的表单验证大致有两种,一种是手动验证,一种是自动验证.一.手动验证 所谓手动验证是通过AngularJS表单的属性来验证.而成为AngularJS表单必须满足两个条件: 1.给form元素加上novalidate="novalidate": 2.给form元素加上name="theForm",如下: <!DOCTYPE html> <html lang="en" ng-app="myApp1"

model中的自动验证 $_validate $_auto

普通模式: 1 <?php 2 class UserModel extends RelationModel{ 3 4 5 /**自动验证**/ 6 protected $_validate = array( 7 /**array([验证字段],[验证规则],[错误提示],(验证条件(默认为存在字段就验证)),(附加规则),(验证时间))**/ 8 array('username','','该用户名已经存在!',1,'unique'), 9 array('password','5,12','密码过

TP 自动验证规则

#自动验证 protected $_validate=array( #参数最后代表1 表示必须验证,0表示当这个字段存在的时候验证 array('username','require','账号不能为空',1), #只有添加的时候生效 array('password', 'require', '密码不能为空!', 1, 'regex', 1), array('password', 'require', '密码不能为空!', 1, 'regex', 4), #判断账号是否在数据库中存在 1表示添加时

thinkphp自动验证

1.thinkphp的自动验证 自动验证是ThinkPHP模型层提供的一种数据验证方法,可以在使用create创建数据对象的时候自动进行数据验证. 1.1应用范围: 进行数据类型.业务规则.安全判断等方面的验证. 1.2验证方式: 1.静态方式:在模型类里面通过$_validate属性定义验证规则. 2.动态方式:使用模型类的validate方法动态创建自动验证规则. 1.3验证规则: 例:一个简单的注册信息时的自动验证: <?php namespace Home\Model; use Thin

Thinkphp 中的自动验证 上一篇有例子

说明,只要定义了Model,在任何地方调用,都会进行验证.很方便. 必须是D方法,才会有效.M方法不会触发自动验证. array( array(验证字段1,验证规则,错误提示,[验证条件,附加规则,验证时间]), array(验证字段2,验证规则,错误提示,[验证条件,附加规则,验证时间]), ..... ); 1.验证字段 需要验证的表单字段名称,这个字段不一定是数据库字段,也可以是表单的一些辅助字段,例如确认密码和验证码等等.有个别验证规则和字段无关的情况下,验证字段是可以随意设置的,例如e

2016/05/15 ThinkPHP3.2.2 表单自动验证实例 验证规则的数组 直接写在相应的控制器里

使用TP 3.2框架 验证规则也可以写到模型里,但感觉有些麻烦, 一是有时候不同页面验证的方式会不一样, 二是看到这个   Add  事件里的代码,就清楚要接收什么数据,如何验证数据能够在第一眼有个大致了解 ①控制器代码页 1 <?php 2 namespace Home\Controller; 3 use Think\Controller; 4 5 header("Content-type: text/html; charset=utf-8"); 6 7 class AddCo

thinkphp自动验证和自动完成

tp验证码的自动验证小案例 模板文件 <form action="" method="post"> <p> User: <input type="text" name="name1" id=""> </p> <p> PASS: <input type="password" name="pass1" id

ThinkPHP 自动验证与自动填充无效可能的原因

原文链接:http://www.5idev.com/p-thinkphp_validate_auto_Invalid.shtml 自动验证与自动填充是在使用ThinkPHP时经常用到的功能,但偶尔会遇到自动验证与自动填充无效的情况,本文就ThinkPHP 自动验证与自动填充无效可能的原因做一些分析. create() ThinkPHP 自动验证与自动填充是在创建数据对象 create() 时实现的,因此自动验证与自动填充无效很大程度上与 create() 有关. create 方法语法如下: c

Thinkphp表单自动验证

之前项目经常用到,没做总结. 自动验证是Thinphp模型层提供的一种数据验证方法,可以在使用create创建数据对象的时候自动进行数据验证. 原理: create()方法收集表单($_POST)信息并返回,同时触发表单自动验证,过滤非法字段, 在控制器中使用create()方法,(返回值为true/false),会自动触发模型类中的$_validate属性(为父类Model中的方法,在子类Model中重写),在$_validate中自定义验证规则(验证规则下面会详细说明),当create()方