Suche…


Überprüfen Sie den eindeutigen Wert aus der Datenbank in Yii2

Nur wenige Personen haben Probleme mit der Fehlermeldung, wenn der vorhandene Wert in das Textfeld eingegeben wird.

So zum Beispiel bin ich nicht so dass Benutzer vorhandene E - Mail einzugeben.

signup.php

(Seite, auf der Sie einen neuen Benutzer ohne vorhandene E-Mail-ID registrieren wollten)

  1. Entfernen Sie use yii\bootstrap\ActiveForm; (Falls vorhanden)
  2. Fügen Sie use yii\widgets\ActiveForm;
  3. Fügen Sie 'enableAjaxValidation' => true (In diesem Feld, wo Sie den Benutzer für die Eingabe der vorhandenen E-Mail-ID anhalten möchten.)
<?php
use yii\bootstrap\ActiveForm;
use yii\widgets\ActiveForm;
?>

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

Regler

Fügen Sie diese Zeilen oben hinzu. 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())) {
      
    }
    
  }
?>

Modell

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

Validieren des eindeutigen Werts aus der Datenbank: Eindeutige Validierung

Bei einigen Personen treten Probleme mit Fehlermeldungen auf, wenn ein vorhandener Wert eingegeben wird. Zum Beispiel erlaube ich keine Benutzeranmeldung mit einer vorhandenen E-Mail.

Aussicht

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

Regler

<?php
use yii\web\Response; // important lines
use yii\widgets\ActiveForm; // important lines
        
.
.// Your code
.
        
public function actionSignup() 
{
            
    $modelUser = new User();
        
    //Add This For Ajax Validation 
    if(Yii::$app->request->isAjax && $modelUser->load(Yii::$app->request->post())){
        Yii::$app->response->format = Response::FORMAT_JSON;
        return ActiveForm::validate($modelUser);
    } 
    if ($modelUser->load(Yii::$app->request->post()) && $modelUser->save()) {
        return $this->redirect(['someplace nice']);
    }
    return $this->render('update', [
        'modelUser' => $modelUser,
    ]);            
}

Modell

public function rules()
{
    return [
        ..............
        ['email', 'unique', 'message'=>'Email already exist. Please try another one.'],
        ...........
    ]
}

Deaktivieren Sie die Überprüfungsfehlermeldung bei Fokus / Key Up

Standardmäßig erscheint eine Fehlermeldung unter dem textbox in <div class="help-block"></div> bei keyUp oder nach dem Drücken des " Submit <div class="help-block"></div> -Buttons , wenn keine Validierungsbedingungen erfüllt sind.

Manchmal möchten wir eine Nachricht nur beim onKeyup , dh keine Validierung beim Ereignis onKeyup .

yii2/widgets/ActiveForm.php wir yii2/widgets/ActiveForm.php Datei yii2/widgets/ActiveForm.php :

<?php

namespace yii\widgets;

use Yii;
use yii\base\InvalidCallException;
use yii\base\Widget;
use yii\base\Model;
use yii\helpers\ArrayHelper;
use yii\helpers\Url;
use yii\helpers\Html;
use yii\helpers\Json;

class ActiveForm extends Widget
{
  public $action = '';
  public $method = 'post';
  public $options = [];
  .
  .
  .
  public $validateOnSubmit = true;
  public $validateOnChange = true;
  public $validateOnBlur = true;
  public $validateOnType = false;
  
  .
  .
  .
  
}

Dort sehen wir, dass $validateOnBlur standardmäßig auf true gesetzt ist. Das Ändern von Framework-Dateien ist eine sehr schlechte Sache, daher müssen wir sie bei Verwendung des Formulars überschreiben:

<?php $form = ActiveForm::begin([ 'id' => 'register-form','validateOnBlur' => false]); ?>

Szenario in der Validierung

Mit Hilfe des Szenarios können Sie die Validierung in verschiedenen Situationen durchführen

Szenario in Modellklasse definieren

    class User extends \yii\db\ActiveRecord 
    {
      public static function tableName()
      {
          return 'user_master';
      }

    // define validation in rule() function
  public function rules()
  {
    return [
      [['email_id'],'email'],
      [['first_name',],'required','on'=>['create','update']],  // create scenario
      [['email_id',],'required','on'=> ['admin','create','update','forgotpassword']],
      [['mobile',],'required','on'=>['admin','create','update']],
    ];
  }
}

Szenario im Controller verwenden

public function actionCreate()
{
  $model = new User();
  $model->scenario="create";  // use create scenario, create scenario validaion applied in this model
            
  
}
public function actionUpdate()
{
    $model = new User();
    $model->scenario="update";  // use update scenario, update scenario validaion applied in this model
}

Array validieren

Seit Yii2 Version 2.0.4 gibt es den EachValidator, um jedes Element in einem Array zu überprüfen.

[
    // ... other rules
    ['userIDs', 'each', 'rule' => ['integer']],
]

Der Teil ['integer'] kann jedes andere von Yii2 angebotene Prüferobjekt sein und kann die spezifischen Argumente für den Prüfer enthalten. Wie: ['integer', 'min' => 1337] . Wenn die Benutzer-IDs kein Array enthält, schlägt die Überprüfung der Regel fehl.

Wenn Sie nur sehen möchten, ob ein Attribut ein Array enthält, ohne den Inhalt zu überprüfen, können Sie einen eigenen Prüfer schreiben.

[
    ['myAttr', function($attribute, $params) {
        if (!is_array($this->$attribute)) {
            $this->addError($attribute, "$attribute isn't an array!");
        }
    }]
]


Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow