TP5自动验证唯一性不生效unique

浏览:10087 发布日期:2016/12/28 分类:ThinkPHP5专区 关键字: unique 唯一性 自动验证 tp5 thinkphp5
ps: 数据 mongodb TP5 PHP 5.6 apache 2.4 OS winodws

在做自动验证的时候 发现唯一性验证不生效。<?php
namespace app\admin\validate;
use think\Validate;


/*
 * 调用自动验证
 * 
 */
class User extends Validate{
    
    //需要验证的键值
    protected $rule =   [
        'email'              => "require|email|unique:user|checkUserEmail:net.com",  //必填。验证邮箱、验证是否是内部邮箱.验证邮箱在user表中唯一性
        'code'               => 'require|number|length:6',    //验证码 必填 整数 长度是6位
        'sex'                => 'number|in:0,1',
        'name'               => 'require|unique:user',
        'password'           => 'require|length:6,20',
        'password2'          => 'require|confirm:password',  //必填。验证字段和password字段的值相等
        'clause'             => 'accepted',
    ];

    //验证不符返回msg
    protected $message  =   [
        'email.require'      => '账号必须',
        'email.email'       => '请输入正确邮箱地址!',
        'email.unique'      => '用户名已存在',
        'code.require'      => '验证码必填',    
        'code.number'       => '验证码格式为数字',
        'code.length'       =>'验证码格式为6位的数字',
        'name.require' => '用户名必填',
        'name.unique' => '用户名已存在',
        'password.require'       => '密码必填',
        'password.length'       => '密码应在6-20之间',
        'password2.require'   => '确认密码必填',
        'password2.confirm'   => '确认密码与密码内容不一致',        
        'sex.number'    => '性别必须是数字',
        'sex.in'   => '性别必须是0-1之间',
        'clause.accepted' => '请同意协议',
    ];

    //需要指定验证位置 和字段
    protected $scene = [
        'login'                 =>  ['email','password'],
//        'signup'                =>  ['email','password','password2','sex','name','clause','code'],
        'signup'                =>  ['name'],
    ];
调用:    public function signup(){
        $requset = Request::instance();
        if($requset->isAjax()){
            //判断请求是否是当前域名
            $data = $requset->param();
            
            $result = $this->validate($data,'User.signup');
            //验证字段
            if($result != true){
                    return ['code' => 400, 'msg' => $result];
            }
//            //验证码有效性  
//            if( !Cache::tag('signup')->has($data['email']) ){  //添加标签是为了更准确的定位业务
//                return ['code'=>401,'msg'=>'验证码已失效,请重新获取'];
//            }else if( Cache::tag('signup')->get($data['email']) !== $data['code'] ){
//                return ['code'=>402,'msg'=>'验证码不匹配,请重新输入'];
//            }
            dump($data);die;
其他的验证方法可用。证明我的引入或者调用类库是没问题的。为唯独验证邮箱和name 在user表中的唯一性时不会返回错误信息。
打开user表发现插入多条。
虽然这个问题可以用多几行代码来写。但还是觉着比较蛋疼。不知道mysql会不会遇到这个问题。
最佳答案
评论( 相关
后面还有条评论,点击查看>>