unique 验证问题,求大佬指点 [ 2.0 版本 ]
看了下手册也没见到相关说明的
`
['name','unique','targetAttribute' => 'name', 'message' => '账号已存在']
如何设置。找到或没找到 数据都返回出结果
就是说找到数据,就说存在,没找到的话就说  不存在,
哪怕返回一个 1 也好啊
            
111111111111
最佳答案
- 
                                                 'unique'是使用 Ajax 来判断的,你需要在 form 中使用enableAjaxValidation将'name'输入项的Ajax 打开:<?=$form->field($model, 'name',['enableAjaxValidation' => true])->textInput() ?>这样你才能从前端获取到检测结果 共 7 条回复 @朕的大清完了 
 ['name','unique','targetAttribute' => 'name', 'message' => '账号已存在']
 这个rule只有在Yii2的ActiveForm中有效的,你如果自己写ajax,那就用自定义的action中返回一个ajax结果就可以了,返回时指定是json数据,格式像这样:public function actionAjax(){ if (Yii::$app->request->isAjax) { ...... Yii::$app->response->format = \yii\web\Response::FORMAT_JSON; return ['error'=>$error]; } }这个数据前端的success就能接收到了。 
 前端要使用msg.error来获取错误信息。 @朕的大清完了 
 你理解的没错,有空了多看看Yii2的官方文档,使用ActiveForm做验证非常方便的。关于Yii2的Ajax验证,可以看看我的这篇文章:
 Yii2的表单验证之三:Ajax验证
其他 1 个回答
- 
 正常情况下,只在找到情况(也就是name有重复了)才会报错,而没有找到不会报错。你完全可以判断是否有该属性的错误信息来判断: 如果找到重复的name,就是 $model->getError('name')不为空,返回“账号已存在” 如果找不到,也就是说,name不重复,没有问题: $model->getError('name')将返回null天亮来再细看看吧 共 1 条回复  谢谢大佬,这么晚还没睡哈, 
 我是用 js 判断的,返回的 json 信息是
 regform-name: ["账号已存在"]
 用下面这句话来叛段,明显有问题。if(msg==undefined){ tool.csucc('恭喜,帐号可以注册'); }else{ tool.cssno(msg['regform-name']) }不管我判断 undefined还是null。还是''。或者'undefined'它都不会切换回去, 比如返回空的json,它就不会提示 恭喜,帐号可以注册 但如果返回 regform-name: ["账号已存在"]它又能提示出来,搞得头疼,特来发帖求大佬指点下 
  
  
yzg91
最后登录:2022-05-10
在线时长:22小时13分
- 粉丝2
- 金钱479
- 威望20
- 积分899