2018-11-29 23:27:06 1474次浏览 2条回答 0 悬赏 10 金钱

看了下手册也没见到相关说明的
` ['name','unique','targetAttribute' => 'name', 'message' => '账号已存在']

如何设置。找到或没找到 数据都返回出结果

就是说找到数据,就说存在,没找到的话就说  不存在,

哪怕返回一个 1 也好啊
            
补充于 2018-11-30 02:36

111111111111

最佳答案

  • 阿江 发布于 2018-11-30 08:10 举报

    'unique' 是使用 Ajax 来判断的,你需要在 form 中使用 enableAjaxValidation'name' 输入项的Ajax 打开:

    <?=$form->field($model, 'name',['enableAjaxValidation' => true])->textInput() ?>
    

    这样你才能从前端获取到检测结果

    7 条回复
    回复于 2018-11-30 10:24 回复

    对,具体应用前端就是开启enabelAjaxvalidation!

    回复于 2018-12-01 10:56 回复

    我没用yii自带的表单生成html。html都是直接代码放进去的,咋开启enableAjaxValidation呀

    回复于 2018-12-01 11:01 回复
    $.ajax({
                    url:"",
                    type:"post",
                    data:{username:username},
                    success:function(msg){
                        if(msg==undefined){
                        tool.csucc('恭喜,帐号可以注册');
                        }else{
                        tool.cssno(msg['regform-name'])
                        }
                    },
    
                });
    

    提交表单就是ajax提交的呀,
    有数据就返回,没有~就不返回,这不返回数据,检测不到啊,

    回复于 2018-12-01 15:42 回复

    @朕的大清完了
    ['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来获取错误信息。

    回复于 2018-12-01 17:31 回复

    意思是自己写的ajax 要自己写个验证规则来吗,那这rule不能用了啊,好鸡肋好蛋疼哦

    回复于 2018-12-01 17:54 回复


    你理解的没错,有空了多看看Yii2的官方文档,使用ActiveForm做验证非常方便的。关于Yii2的Ajax验证,可以看看我的这篇文章:
    Yii2的表单验证之三:Ajax验证

    回复于 2018-12-02 16:40 回复

    好的 谢谢

  • 回答于 2018-11-30 00:35 举报

    正常情况下,只在找到情况(也就是name有重复了)才会报错,而没有找到不会报错。你完全可以判断是否有该属性的错误信息来判断:

    如果找到重复的name,就是
    $model->getError('name')不为空,返回“账号已存在”
    如果找不到,也就是说,name不重复,没有问题:
    $model->getError('name')将返回null
    

    天亮来再细看看吧

    1 条回复
    回复于 2018-11-30 02:38 回复

    谢谢大佬,这么晚还没睡哈,
    我是用 js 判断的,返回的 json 信息是
    regform-name: ["账号已存在"]
    用下面这句话来叛段,明显有问题。

    if(msg==undefined){
        tool.csucc('恭喜,帐号可以注册');
    }else{
    tool.cssno(msg['regform-name'])
    }
    

    不管我判断 undefined 还是 null。还是 ''。或者 'undefined'

    它都不会切换回去,

    比如返回空的json,它就不会提示 恭喜,帐号可以注册

    但如果返回regform-name: ["账号已存在"]

    它又能提示出来,搞得头疼,特来发帖求大佬指点下
    1.png
    2.png

您需要登录后才可以回答。登录 | 立即注册
朕的大清完了
主管

朕的大清完了

注册时间:2018-11-15
最后登录:2022-05-10
在线时长:22小时13分
  • 粉丝2
  • 金钱479
  • 威望20
  • 积分899

热门问题