web-dev-qa-db-fra.com

Comment valider un email et un email existe déjà ou pas, dans Yii Framework?

Comment valider un email en utilisant le code de fonction des règles de validation du modèle Yii. Également, comment vérifier si les courriels existent ou non, à l’aide des règles de validation du modèle dans Yii.

16
george

Vous pouvez définir vos validations de modèle comme ci-dessous

public function rules()
{
    // NOTE: you should only define rules for those attributes that
    // will receive user inputs.
    return array(
            //First parameter is your field name of table which has email value
        array('email', 'email','message'=>"The email isn't correct"),
        array('email', 'unique','message'=>'Email already exists!'),            
    );
}

Yii Reference Link Pour plus de détails: http://www.yiiframework.com/wiki/56/

24
GBD

Vous pouvez créer votre méthode de validation personnalisée pour répondre à vos besoins.

Créez une fonction dans la classe de modèle:

public function uniqueEmail($attribute, $params)
{
     // Set $emailExist variable true or false by using your custom query on checking in database table if email exist or not.
    // You can user $this->{$attribute} to get attribute value.

     $emailExist = true;

     if($emailExist)
    $this->addError('email','Email already exists');
}

Utilisez cette méthode de validation dans les règles:

array('email', 'uniqueEmail','message'=>'Email already exists!'),    
6
Onkar Janwa

Pour Yii2, j'ai utilisé ce qui suit dans un modèle appelé Register qui utilisera la classe d'utilisateurs.

public function rules()
{
    return [

        ['Email', 'filter', 'filter' => 'trim'],
        ['Email', 'required'],
        ['Email', 'email'],
        ['Email', 'unique', 'targetClass' => '\common\models\User', 'message' => 'This email address has already been taken.'],

    ];
}

Vous devez utiliser targetClass et mettre le Namepsace pour l'utilisateur de classe

4
Howard Panton

Validation personnalisée, code court et doux. essayez ça marche bien - 

public function rules()
    {   
        return array(
            array('email, first_name, last_name, password, repeat_password', 'required'),
            array('email', 'email','message'=>"The email isn't correct"),
            array('email', 'uniqueEmail'),
        );  
    }

écrire cette fonction personnalisée dans le même modèle -

public function uniqueEmail($attribute, $params)
    {
        if($user = User::model()->exists('email=:email',array('email'=>$this->email)))
          $this->addError($attribute, 'Email already exists!');
    }
4
Rohit Suthar

Vous pouvez facilement trouver si un email est déjà présent dans votre base de données ou non en définissant la règle.

Voici la règle.

array('xxx', 'unique', 'className' => 'SomeClass', 'attributeName' => 'SomeAttribute'),

Exemple.

public function rules() {
   return array(
     ...
     array('email', 'unique', 'className' => 'User', 'attributeName' => 'email', 'message'=>'This Email is already in use'),
     ...
); 
}

Ici, je veux mettre la validation sur Email, ce qui est unique, mon nom de classe de modèle est Utilisateur, nom d'attribut est le nom de champ de la table, c'est-à-dire l'email et si l'email est déjà présent dans votre table, le message à afficher.

Si cela donne une erreur, vous pouvez modifier votre table et rendre unique le champ email.

ALTER TABLE utilisateur ADD UNIQUE (email)

Puis vérifier.

d'autres validations d'email sont ci-dessous. que je pense ensemble complet de validation de courrier électronique.

public function rules() {
   return array(
     ...
     array('email', 'required'), 
     array('email', 'length', 'max'=>200),
     array('email', 'email', 'message'=>'Email is not valid'),
     array('email', 'unique', 'className' => 'User', 'attributeName' => 'email', 'message'=>'This Email is already in use'),
     ...
); }

C'est tout. Merci

Suivez les quelques modifications ci-dessous: Suivez votre fichier conformément au module que vous avez utilisé.

Allez aux modèles -> ouvert-> Users.php -> Modifiez la ligne comme mentionné ci-dessous.

 public function rules()
    {
        return [
                [['User_Email'], 'unique'],
                [['User_Mobile'],'unique'],
              ];
     }

Maintenant, allez dans views-> users -> Open _form.php-> écrivez le code comme mentionné ci-dessous

<div class="users-form">

    <?php $form = ActiveForm::begin([
            'id' => $model->formName(),
            'enableAjaxValidation' => true,
        ]); ?>

 <?= $form->field($model, 'User_Email')->textInput(['maxlength' => true])?>
 <?= $form->field($model, 'User_Mobile')->textInput(['maxlength' => true])?>
    <div class="form-group">
            <?= Html::submitButton($model->isNewRecord ? 'Create' : 'Update',  ['class' => $model->isNewRecord ? 'btn btn-success' : 'btn btn-primary']) ?>
        </div>

        <?php ActiveForm::end(); ?>

    </div>

Maintenant, allez sur Controller-> open UsersController.php -> wirte le code comme mentionné ci-dessous

public function actionCreate()
    {
       if(Yii::$app->request->isAjax && $model->load(Yii::$app->request->post())){
            Yii :: $app->response->format = 'json';
            return \yii\bootstrap\ActiveForm::validate($model);
            }
}

Je vous remercie

0
Bhatt Akshay