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