zoukankan      html  css  js  c++  java
  • yii2 modal弹窗之ActiveForm ajax表单异步验证

    modal弹窗提交的表单是怎么验证的?

    该问题的实质其实与modal的关系倒不大,其问题的核心在于ActiveForm的异步验证上,解决了首要矛盾,我们本篇文章的问题也就迎刃而解了。顺便再叨唠一句,modal确实没啥好说了。后面若是有我再把话改回来。

    yii2中,ActiveForm默认做了客户端验证,但是表单的提交,却不是无刷新的。也就是常常看到的表单提交后页面会刷新。如果想要开启无刷新的模式,只需要在ActiveForm开始开启enableAjaxValidation即可,像下面这样:

    <?php $form = ActiveForm::begin([
            'id' => 'form-id',
            'enableAjaxValidation' => true,
            'validationUrl' => Url::toRoute(['validate-form']),
        ]
    ); ?>
    

      

    注意哦,id和enableAjaxValidation一个都不能少。

    关于validateUrl我们做一个说明。如果你不设置该参数,该地址默认是你当前路由,而又恰巧你当前路由就是表单form的action,你会很好奇的发现,当表单项input失去焦点的时候,你对数据的修改已经提交到后端进行了处理了?这往往不是我们想要的,此时就需要给validateUrl设置一个路由地址,其所要请求的操作的意义就在于异步做验证!我们看具体实现:

    //表单提交操作,基本上不需要做改动
    if ($model->load(Yii::$app->request->post()) && $model->save()) {
            return $this->redirect(['index']);
        }
    }
    return $this->render('create', [
        'model' => $model,
    ]);
    
    // @see http://www.manks.top/yii2_modal_activeform_ajax.html
    // 看主要的验证操作,该操作是表单字段失去焦点时异步验证,同时如果直接提交表单,也会先执行该操作进行验证
    public function actionValidateForm () {
        Yii::$app->response->format = yiiwebResponse::FORMAT_JSON;
        $model = new Model();  
        $model->load(Yii::$app->request->post());  
        return yiiwidgetsActiveForm::validate($model);  
    }
    

      

    如此一来就简单的实现了yii2异步无刷新表单验证了!

    参考:https://www.cnblogs.com/wwolf/p/5599596.html

  • 相关阅读:
    快速排序学习
    转载 libSVM介绍(二)
    支持向量机: Maximum Margin Classifier
    联发科笔试题之字符编码
    研究1
    在OnLButtonDown获取其他控件被点击的消息
    希尔排序学习
    快速排序
    别人的string的实现,有时间好好学习下
    完成动态根据类别动态填充区域颜色
  • 原文地址:https://www.cnblogs.com/meetuj/p/11642240.html
Copyright © 2011-2022 走看看