如何在Yii Framework中验证电子邮件和电子邮件是否已存在?

0ve6wy6x  于 2022-11-09  发布在  其他
关注(0)|答案(6)|浏览(272)

如何使用Yii模型验证规则功能代码验证邮件。以及如何使用Yii模型验证规则功能检查邮件是否存在。

o75abkj4

o75abkj41#

您可以按如下方式设置模型验证

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/

wztqucjr

wztqucjr2#

您可以创建自定义验证方法以满足您的要求。
在模型类中创建函数:

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!'),
xeufq47z

xeufq47z3#

对于Yii2,我在一个名为Register的模型中使用了以下代码,该模型将使用用户类。

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放置为类用户

im9ewurl

im9ewurl4#

自定义验证,简短而甜蜜的代码。试试这个,它工作得很好-

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

y3bcpkx15#

通过定义规则,您可以很容易地发现电子邮件是否已存在于数据库中。
这是规则。

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

这里我想对Email进行验证,Email是唯一的,我的模型类名是User,attributeName是表的字段名,即email,如果email已经存在于表中,则显示消息。
如果它给出错误,那么你可以改变你的表,使唯一的电子邮件字段。
ALTER TABLE用户添加唯一(电子邮件)
然后检查。
其他电子邮件验证在下面。我认为这是完整的一套电子邮件验证。

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

就这样,谢谢

ev7lccsx

ev7lccsx6#

进行如下几处修改:根据您使用的模块跟踪您的文件。
转到模型-〉打开-〉Users.php -〉修改行如下所述。

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

现在转到视图-〉用户-〉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>

现在进入控制器-〉打开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);
            }
}

谢谢你

相关问题