thinkphp自动验证相关

来源:互联网 发布:淘宝店代销钱怎么算 编辑:程序博客网 时间:2024/04/23 19:56
protected $_validate = array(     //邮箱验证,格式,必须 array('email','require','邮箱必须!'),  array('email','email','邮箱格式不正确!'), //昵称验证,格式,必须,唯一   array('nickname','require','昵称必须!'), array('nickname','','昵称已经存在!',0,'unique',3),  array('nickname','/^[a-zA-Z0-9\_\x{4e00}-\x{9fa5}]{3,15}$/u','昵称不合法!'), //密保问题验证 array('question','require','密保问题必须!'),  array('question','/^[a-zA-Z0-9\_\x{4e00}-\x{9fa5}]{3,15}$/u','问题不合法!'), //密保问题答案验证 array('answer','require','密保问题必须!'),  array('answer','/^[a-zA-Z0-9\_\x{4e00}-\x{9fa5}]{3,15}$/u','问题不合法!')  //array('value',array(1,2,3),'值的范围不正确!',2,'in'), // 当值不为空的时候判断是否在一个范围内        );

      以上为自动验证的静态方式的写法,要注意的是:

      1.php中文验证方式为  

        \x{4e00}-\x{9fa5} //不要忘记u参数 小写 表示uttf-8格式验证 这个是关键,如果你的前台是utf-8的话
      2.现在来说说unique 和最后一个参数,首先说我遇到的问题:

          在唯一性一栏 发现无法验证 然后数据库插入失败 原因是,重复插入,也就是说,确实重复了 但是unique 判断失效,经过测试其它的条件是成立的,在这个问题纠结了很久,后来想起是不是因为数据库外键的原因,我这是两个表同时‘插入’,第一个主表没问题,后面的问题就来了,于是我把验证时间改为update时验证,结果惊喜,成功!原来以为真的成功了 后来随便输入测试 发现任意输入都会提示已存在,无奈进入源码探索unique的运作方式看到了这一行代码:

     if(!empty($data[$this->getPk()])) { // 完善编辑的时候验证唯一                    $map[$this->getPk()] = array('neq',$data[$this->getPk()]);                }
       想起第二个表中是没有加主键的,于是 随便加了一个id主键,测试成功,这次真的成功了,但是至于验证一个字段的值是否已存在为什么要主键,目前还不知道为什么,希望有人可以告知!
    


0 0
原创粉丝点击