Как проверить электронную почту, а электронная почта уже существует или не проверять в Yii Framework?

Как проверить электронную почту с помощью кода функции правил проверки модели Yii. Также как проверить существование или отсутствие электронной почты с помощью функции правил проверки модели в Yii.


person george    schedule 08.10.2012    source источник


Ответы (6)


Вы можете установить проверки модели, как показано ниже.

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 для более подробной информации: http://www.yiiframework.com/wiki/56/

person GBD    schedule 08.10.2012

Вы можете создать свой собственный метод проверки, чтобы выполнить ваше требование.

Создайте функцию в классе модели:

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');
}

Используйте этот метод проверки в правилах:

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

Для Yii2 я использовал следующее в модели под названием «Регистрация», которая будет использовать пользовательский класс.

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.'],

    ];
}

Вам нужно использовать targetClass и поместить Namepsace для пользователя класса

person Howard Panton    schedule 30.07.2015

Пользовательская проверка, короткий и приятный код. попробуй это работает нормально -

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'),
        );  
    }

напишите эту пользовательскую функцию в той же модели -

public function uniqueEmail($attribute, $params){
        if($user = User::model()->exists('email=:email',array('email'=>$this->email)))
          $this->addError($attribute, 'Email already exists!');
    }
person Rohit Suthar    schedule 17.07.2014
comment
Это будет работать и для Yii2, если тест будет упрощен до: if (User::findOne(['email' =› $this-›email])) - person Rich Harding; 07.07.2018

Вы можете легко обнаружить, что электронная почта уже присутствует в вашей базе данных или нет, определив правило.

Вот правило.

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

Пример.

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

Здесь я хочу поставить проверку на электронную почту, которая уникальна, мое имя класса модели - User, attributeName - это имя поля таблицы, т.е. электронная почта, и если электронная почта уже присутствует в вашей таблице, отобразите сообщение.

Если это дает ошибку, вы можете изменить свою таблицу и сделать уникальным поле электронной почты.

ALTER TABLE user ADD UNIQUE (email)

Затем проверьте.

другие проверки электронной почты приведены ниже. который, я думаю, полный набор проверки электронной почты.

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'),
     ...
); }

Вот и все. Спасибо

person Muhammad Rizwan Kaim Khani    schedule 04.11.2013

Выполните несколько изменений, как показано ниже: Следуйте файлу в соответствии с вашим модулем, который вы использовали.

Перейдите в раздел models -> open-> Users.php -> Modify, как указано ниже.

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

Теперь перейдите в views-> users -> Open _form.php-> напишите код, как указано ниже.

<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>

Теперь перейдите в Controller-> откройте UsersController.php -> введите код, как указано ниже.

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);
            }
}

Спасибо

person Bhatt Akshay    schedule 18.10.2016