首页 > 解决方案 > 在不刷新页面的情况下显示验证错误

问题描述

有什么方法可以在 Yii2 中显示验证错误而无需重定向或刷新?

这是我执行登录操作的默认控制器代码,当输入的数据与数据库中的数据不匹配时,我想突出显示文本字段,对数据库进行简单验证。

public function actionLogin()
    {
        /** @var \amnah\yii2\user\models\forms\LoginForm $model */
        $model = $this->module->model("LoginForm");
    
        // load post data and login
        $post = Yii::$app->request->post();
        if ($model->load($post) && $model->validate()) {
            $returnUrl = $this->performLogin(
                $model->getUser(), $model->rememberMe
            );
            return $this->redirect($returnUrl);
        }
        
        return $this->render('login', compact("model"));
}

标签: mysqlvalidationyii2

解决方案


你可以这样做:

表单登录

<?php $form = ActiveForm::begin([
                            'validationUrl' => Url::toRoute(['site/login-validate']),
                            'action' => Url::toRoute(['site/login']),
                            'options' => [
                                    'class' => 'form login'
                            ],
                    ]); ?>

现场控制器

public function actionLoginValidate(){
      if(Yii::$app->request->isAjax){
            $model = new Login();
            if($model->load(Yii::$app->request->post())){
                Yii::$app->response->format = Response::FORMAT_JSON;
                return ActiveForm::validate($model);
            }
      }
     throw new BadRequestHttpException("This action is not allowed.");
}

推荐阅读