web-dev-qa-db-fra.com

Yii2, Message de validation personnalisé avec noms d'attribut

Dans le formulaire de connexion, je dois avoir glyphicon-remove icône à la fin de chaque message de validation avec les noms de champs correspondants. J'ai donc utilisé le code ci-dessous dans le Login model.

['email', 'required', 'message' => 'Email cannot be blank<span class="glyphicon glyphicon-remove"></span>'],
['password', 'required', 'message' => 'Password cannot be blank<span class="glyphicon glyphicon-remove"></span>']

Au lieu de ce code ci-dessus, existe-t-il un moyen possible d'utiliser quelque chose comme le code ci-dessous.

[['email', 'password'], 'required', 'message' => $attribute.' cannot be blank<span class="glyphicon glyphicon-remove"></span>']

L'idée du code ci-dessus est d'obtenir dynamiquement le nom de champ correspondant pour chaque champ.

Veuillez faire le nécessaire. Merci.

Mise à jour

Le code HTML (<span class="glyphicon glyphicon-remove"></span>) ici que j'ai utilisé est sortie correctement en utilisant encode=>'false'. Mais ce dont j'ai besoin, c'est au lieu de définir séparément pour chaque domaine, il faut définir en commun pour tous les domaines.

12
Siva.G ツ

Vous pouvez utiliser {attribute} dans votre message pour référencer le nom de l'attribut.

public function rules()
  {
    return [
      [
        ['email','password', 'password_verify', 'alias', 'fullname'],
        'required',
        'message' => '{attribute} is required'
      ],
      [['email'], 'email'],
      [['fullname'], 'string', 'max' => 50],
      [['password', 'password_verify'], 'string', 'min' => 8, 'max' => 20],
      [['password_verify'], 'compare', 'compareAttribute' => 'password'],
  ];
}

Vous pouvez également utiliser les autres options définies dans le validateur comme {min} ou {requiredValue}

26
Alfred_P

Ajoutez ceci dans votre formulaire:

_ form.php

<?php
   $form = ActiveForm::begin([
            'options' => ['enctype' => 'multipart/form-data'],
            'fieldConfig' => ['errorOptions' => ['encode' => false, 'class' => 'help-block']] 
   ]);
?>

errorOptions l'encodage par défaut est vrai donc, votre code html est encodé en tant que message, donc il ne fonctionnera pas tant que vous n'aurez pas défini 'encode' => false.

2
Insane Skull