yii2
Godkännande
Sök…
Validera unikt värde från databasen i Yii2
Få människor har problem angående felmeddelandet som inte visas om befintligt värde anges i textrutan.
Så till exempel tillåter jag inte användare att ange befintlig e-post .
signup.php
(Sidan där du ville registrera en ny användare utan befintligt e-post-id)
- Ta bort
use yii\bootstrap\ActiveForm;
(om närvarande) - Lägg till
use yii\widgets\ActiveForm;
- Lägg till
'enableAjaxValidation' => true
(I det fältet där du vill stoppa användaren för att ange befintligt e-post-id.)
<?php
use yii\bootstrap\ActiveForm;
use yii\widgets\ActiveForm;
?>
<?= $form->field($modelUser, 'email',['enableAjaxValidation' => true])
->textInput(['class'=>'form-control','placeholder'=>'Email']); ?>
Kontrollant
Lägg till dessa rader på toppen 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.'],
Validera unikt värde från databasen: Unik validering
Vissa människor har problem angående felmeddelanden som inte visas om ett befintligt värde anges. Till exempel tillåter jag inte en användarregistrering med ett befintligt e-postmeddelande.
Se
<?php
......................
<?= $form->field($modelUser, 'email')->textInput(['class'=>'form-control','placeholder'=>'Email']) ?>
......................
Kontrollant
<?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.'],
...........
]
}
Inaktivera valideringsfelmeddelande vid fokus / nyckel
Som standard visas ett felmeddelande under textbox
i <div class="help-block"></div>
på keyUp eller efter att du har tryckt på skicka-knappen om några valideringsbegränsningar inte uppfylls.
Ibland vill vi bara ha ett meddelande på skicka, dvs ingen validering vid onKeyup
händelse.
Låt oss kolla yii2/widgets/ActiveForm.php
filen:
<?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;
.
.
.
}
Där ser vi att $validateOnBlur
är inställd på true
standard. Att ändra ramfiler är mycket dåligt att göra så vi måste åsidosätta det när vi använder formuläret:
<?php $form = ActiveForm::begin([ 'id' => 'register-form','validateOnBlur' => false]); ?>
Scenario i validering
Med hjälp av scenario kan du utföra validering på olika situationer
Definiera scenario i modellklass
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']],
];
}
}
Använd Scenario i Controller
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
}
Validera matris
Sedan Yii2 version 2.0.4 finns det EveryValidator som används för att validera varje objekt i en matris.
[
// ... other rules
['userIDs', 'each', 'rule' => ['integer']],
]
['integer']
-delen kan vara alla andra validatorobjekt som Yii2 erbjuder och kan innehålla de specifika argumenten för validatorn. Gilla: ['integer', 'min' => 1337]
. Om användar-ID: erna inte innehåller en matris kommer valideringen av regel att misslyckas.
Om du bara vill se om ett attribut innehåller en matris utan att validera innehållet kan du skriva din egen validator.
[
['myAttr', function($attribute, $params) {
if (!is_array($this->$attribute)) {
$this->addError($attribute, "$attribute isn't an array!");
}
}]
]