自动验证是ThinkPHP模型层提供的一种数据验证方法,可以在使用create创建数据对象的时候自动进行数据验证。分为静态验证和动态验证。
关于基础知识,请查看手册“自动验证”一章。
一、静态验证
(1)在Ceshi/Controller/路径下新建Yanzheng控制器。
YanzhengController.class.php页面
注意:静态定义方式因为必须定义模型类,所以只能用D函数实例化模型
create方法是对表单提交的POST数据进行自动验证
<?php namespace CeshiController; use ThinkController; class YanzhengController extends Controller { public function jtyz(){ $n= D("users"); if(empty($_POST)){ $this->show(); }else{ //验证要在model层写 if($n->create()){ echo "验证通过!"; }else{ echo $n->getError(); //获取错误信息 } } } public function _empty(){ echo "您访问的操作方法不存在!"; } }
(2)在view层做jtyz.html页面
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> </head> <body> <form action="__ACTION__" method="post"> <div> 用户名:<input type="text" name="uid"></div> <div> 请输入密码:<input type="text" name="pwd1"></div> <div> 请再次输入密码:<input type="text" name="pwd2"></div> <div> 年龄:<input type="text" name="age"></div> <div> 邮箱:<input type="text" name="email"></div> <input type="submit" value="验证" /> </form> </body> </html>
效果图:
(3)在model层写静态验证的验证:(路径如图)
UsersModel.class.php
<?php namespace CeshiModel; use ThinkModel; class UsersModel extends Model { protected $_validate = array( //非空验证 array("uid","require","用户名不能为空"), //相等验证 array("pwd1","require","密码不能为空"), array("pwd2","pwd1","两次密码输入不一致","0","confirm"), //范围验证 array("age","18,30","年龄不在范围内","0","between"), //正则验证 array("email","email","邮箱格式不正确"), ); }
依次验证效果图:
当全部为空时,点击验证
提示:
当输入用户名后,点击验证:
显示:
两次密码输入不一致时,会提示;年龄不在范围内会提示;邮箱格式不正确时会提示;否则会提示验证通过。
二、动态验证
(1) YanzhengController.class.php页面
<?php namespace CeshiController; use ThinkController; class YanzhengController extends Controller { //非空验证 静态 // public function jtyz(){ // $n= D("users"); // // if(empty($_POST)){ // // $this->show(); // // }else{ // //验证要在model层写 // if($n->create()){ // echo "验证通过!"; // }else{ // echo $n->getError(); //获取错误信息 // } // } // } //动态 public function dtyz(){ if(empty($_POST)){ $this->show(); } else { //验证规则 $rules = array( array('uid','require','用户名不能为空!'), ); $u= M("users"); if($u->validate($rules)->create()){ $this->ajaxReturn("OK","eval"); //如果成功 }else{ $this->ajaxReturn($u->getError(),"eval"); //如果不成功 } } } public function _empty(){ echo "您访问的操作方法不存在!"; } }
(2) dtyz.html页面:
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> <!--引入js--> <script src="__ROOT__/Public/js/jquery-1.11.2.min.js"></script> </head> <body> <form action="__ACTION__" method="post"> <div> 用户名:<input type="text" name="uid" id="uid"><span id="ts"></span></div> <input type="submit" value="验证" /> </form> </body> <script> //文本框失去焦点时,显示提示信息 $("#uid").blur(function(){ var uid = $(this).val(); $.ajax({ url:"__ACTION__", data:{uid:uid}, type:"POST", dataType:"TEXT", success:function(data){ alert(data); if(data.trim()=="OK") { $("#ts").html("验证通过!"); }else{ $("#ts").html("用户名不能为空!"); } } }); }) </script> </html>
看一下效果:
当文本框失去焦点时:
当文本框有内容时,再失去焦点: