在 Yii2 中验证数据库中的唯一值

如果在文本框中输入现有值,则很少有人会出现关于错误消息不显示的问题。

所以,例如我不允许用户输入现有的电子邮件

signup.php

(你想在没有现有电子邮件 ID 的情况下注册新用户的页面)

  1. 删除 use yii\bootstrap\ActiveForm;(如果有)
  2. 添加 use yii\widgets\ActiveForm;
  3. 添加'enableAjaxValidation' => true(在该字段中,你希望停止用户输入现有的电子邮件 ID。)
<?php
use yii\bootstrap\ActiveForm;
use yii\widgets\ActiveForm;
?>

<?= $form->field($modelUser, 'email',['enableAjaxValidation' => true])
    ->textInput(['class'=>'form-control','placeholder'=>'Email']); ?>

调节器

use yii\web\Response;use yii\widgets\ActiveForm; 上添加这些行

<?php
use yii\web\Response;
use yii\widgets\ActiveForm;

  .
  .// Your code
  .

  public function actionSignup() {
    
    $modelUser = new User();

    //Add This For Ajax Email Exist Validation 
    if(Yii::$app->request->isAjax && $modelUser->load(Yii::$app->request->post())){
      Yii::$app->response->format = Response::FORMAT_JSON;
      return ActiveForm::validate($modelUser);
    } 
    else if ($model->load(Yii::$app->request->post())) {
      
    }
    
  }
?>

模型

[['email'],'unique','message'=>'Email already exist. Please try another one.'],