yii2
Validierung
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)
- Entfernen Sie
use yii\bootstrap\ActiveForm;
(Falls vorhanden) - Fügen Sie
use yii\widgets\ActiveForm;
- 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!");
}
}]
]