Yii - Validation

Vous ne devez jamais faire confiance aux données reçues des utilisateurs. Pour valider un modèle avec des entrées utilisateur, vous devez appeleryii\base\Model::validate()méthode. Il renvoie une valeur booléenne si la validation réussit. S'il y a des erreurs, vous pouvez les obtenir à partir duyii\base\Model::$errors propriété.

Utilisation des règles

Pour faire le validate() fonction de travail, vous devez remplacer le yii\base\Model::rules() méthode.

Step 1 - Le rules() renvoie un tableau au format suivant.

[
   // required, specifies which attributes should be validated
   ['attr1', 'attr2', ...],
   // required, specifies the type a rule.
   'type_of_rule',
   // optional, defines in which scenario(s) this rule should be applied
   'on' => ['scenario1', 'scenario2', ...],
   // optional, defines additional configurations
   'property' => 'value', ...
]

Pour chaque règle, vous devez définir au moins les attributs auxquels la règle s'applique et le type de règle appliquée.

Les règles de validation de base sont - boolean, captcha, compare, date, default, double, each, email, exist, file, filter, image, ip, in, integer, match, number, required, safe, string, trim, unique, url.

Step 2 - Créez un nouveau modèle dans le models dossier.

<?php
   namespace app\models;
   use Yii;
   use yii\base\Model;
   class RegistrationForm extends Model {
      public $username;
      public $password;
      public $email;
      public $country;
      public $city;
      public $phone;
      public function rules() {
         return [
            // the username, password, email, country, city, and phone attributes are
            //required
            [['username' ,'password', 'email', 'country', 'city', 'phone'], 'required'],
            // the email attribute should be a valid email address
            ['email', 'email'],
         ];
      }
   }
?>

Nous avons déclaré le modèle du formulaire d'inscription. Le modèle a cinq propriétés: nom d'utilisateur, mot de passe, e-mail, pays, ville et téléphone. Ils sont tous obligatoires et la propriété e-mail doit être une adresse e-mail valide.

Step 3 - Ajouter le actionRegistration méthode à la SiteController où nous créons un nouveau RegistrationForm modèle et passez-le à une vue.

public function actionRegistration() {
   $model = new RegistrationForm();
   return $this->render('registration', ['model' => $model]);
}

Step 4- Ajouter une vue pour notre formulaire d'inscription. Dans le dossier views / site, créez un fichier appelé registration.php avec le code suivant.

<?php
   use yii\bootstrap\ActiveForm;
   use yii\bootstrap\Html;
?>

<div class = "row">
   <div class = "col-lg-5">
      <?php $form = ActiveForm::begin(['id' => 'registration-form']); ?>
         <?= $form->field($model, 'username') ?>
         <?= $form->field($model, 'password')->passwordInput() ?>
         <?= $form->field($model, 'email')->input('email') ?>
         <?= $form->field($model, 'country') ?>
         <?= $form->field($model, 'city') ?>
         <?= $form->field($model, 'phone') ?>
         <div class = "form-group">
            <?= Html::submitButton('Submit', ['class' => 'btn btn-primary',
               'name' => 'registration-button']) ?>
         </div>
      <?php ActiveForm::end(); ?>
   </div>
</div>

Nous utilisons le ActiveForm widget pour afficher notre formulaire d'inscription.

Step 5 - Si vous allez chez l'hôte local http://localhost:8080/index.php?r=site/registration et cliquez sur le bouton Soumettre, vous verrez les règles de validation en action.

Step 6 - Pour personnaliser le message d'erreur pour le username propriété, modifiez la rules() méthode de la RegistrationForm de la manière suivante.

public function rules() {
   return [
      // the username, password, email, country, city, and phone attributes are required
      [['password', 'email', 'country', 'city', 'phone'], 'required'],
      ['username', 'required', 'message' => 'Username is required'],
      // the email attribute should be a valid email address
      ['email', 'email'],
   ];
}

Step 7 - Aller chez l'hôte local http://localhost:8080/index.php?r=site/registrationet cliquez sur le bouton Soumettre. Vous remarquerez que le message d'erreur de la propriété du nom d'utilisateur a changé.

Step 8 - Pour personnaliser le processus de validation, vous pouvez remplacer ces méthodes.

  • yii \ base \ Model :: beforeValidate (): déclenche un

    yii \ base \ Model :: EVENT_BEFORE_VALIDATE événement.

  • yii \ base \ Model :: afterValidate (): déclenche un

    yii \ base \ Model :: EVENT_AFTER_VALIDATE événement.

Step 9 - Pour couper les espaces autour de la propriété country et transformer l'entrée vide de la propriété city en une valeur nulle, vous pouvez le trim et default validateurs.

public function rules() {
   return [
      // the username, password, email, country, city, and phone attributes are required
      [['password', 'email', 'country', 'city', 'phone'], 'required'],
      ['username', 'required', 'message' => 'Username is required'],
      ['country', 'trim'], ['city', 'default'],
      // the email attribute should be a valid email address
      ['email', 'email'],
   ];
}

Step 10 - Si une entrée est vide, vous pouvez lui définir une valeur par défaut.

public function rules() {
   return [
      ['city', 'default', 'value' => 'Paris'],
   ];
}

Si la propriété de la ville est vide, la valeur par défaut «Paris» sera utilisée.