在做自动验证的时候 发现唯一性验证不生效。
<?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会不会遇到这个问题。
最佳答案