如何使用Yii模型验证规则功能代码验证电子邮件。 另外,如何使用Yii中的模型验证规则功能检查电子邮件是否存在。
答案 0 :(得分:24)
您可以将模型验证设置如下
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/
答案 1 :(得分:6)
您可以创建自定义验证方法以满足您的要求。
在模型类中创建一个函数:
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!'),
答案 2 :(得分:4)
自定义验证,短代码和甜蜜代码。试试这个它工作正常 -
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!');
}
答案 3 :(得分:4)
对于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放入类用户
答案 4 :(得分:3)
通过定义规则,您可以轻松找到数据库中是否已存在电子邮件。
这是规则。
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进行验证,这是唯一的,我的模型类名是User,attributeName是表的字段名,即电子邮件,如果电子邮件已经存在于您的表中,则显示消息。
如果它出错,那么您可以更改表格并使电子邮件字段唯一。
ALTER TABLE用户ADD UNIQUE(电子邮件)
然后检查。
其他电子邮件验证如下。我认为完整的电子邮件验证。
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'),
...
); }
就是这样。感谢
答案 5 :(得分:0)
按照以下几项修改:按照您使用的模块关注文件。
转到模型 - >开> Users.php - >如下所述修改行。
public function rules()
{
return [
[['User_Email'], 'unique'],
[['User_Mobile'],'unique'],
];
}
现在转到观看 - >用户 - >打开_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-&gt;打开UsersController.php - &gt; wirte如下所述的代码
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);
}
}
谢谢