关于Thinkphp的自动验证create()函数的问题

来源:互联网 发布:supreme淘宝正品店铺 编辑:程序博客网 时间:2024/04/29 16:49

我们使用手册的时候会看到手册上显示的是以下的代码

  1. protected $_validate= array(
  2. array('verify','require','验证码必须!'),//默认情况下用正则进行验证
  3. array('name','','帐号名称已经存在!',0,'unique',1),// 在新增的时候验证name字段是否唯一
  4. array('value',array(1,2,3),'值的范围不正确!',2,'in'),// 当值不为空的时候判断是否在一个范围内
  5. array('repassword','password','确认密码不正确',0,'confirm'),// 验证确认密码是否和密码一致
  6. array('password','checkPwd','密码格式不正确',0,'function'),// 自定义函数验证密码格式
  7. );

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

但是当我们自己写的时候会发现验证时会出现问题,如果我们这样写 if(!$User->create()),再验证的时候就会出现逻辑错误,拿密码和确认密码的例子说一下,如果我们在两个输入框中(输入密码 ,重复输入密码)输入的不一致时,我们得到的是模型里的提示信息即上边的确认密码不正确,但是我们输入的密码和确认密码一致时,虽然不提示密码不一致但是也不会提示密码一致,继续进行的提示等,很懵逼哈,这是为什么呢,我们用谷歌调试的时候不会发现任何问题,代码是正确的,问题出在哪呢,我找了一下,原来是因为create()函数返回的值不仅有true 或者 false两种还会返回空数组等,这就导致了我们的逻辑错误,虽然我们没有输入并不一致,但是用 if(!$User->create()) 这种验证的时候$User->create()返回的是一个空 ‘!’非一下就会认为值为true 或者 1 ,就会继续走exit($User->getError());这条语句,

所以就不会得到我们想要的结果。改正的方法就是将    if(!$User->create())改为false===$User->create()就正确了,这样会限制一下返回值的类型,自然就会验证正确了



0 0
原创粉丝点击