【发布时间】:2012-10-16 10:39:11
【问题描述】:
问题防御
我有一个名为“user.php”的模型 我有一些相同的验证规则如下 我现在要创建一个密码重置表单 在那种形式中,我有一个文本框名称电子邮件(用户模型中使用的电子邮件相同) 在密码重置表单中,我想检查该用户是否已注册,如果已注册用户将发送密码重置链接
我不知道如何验证这个电子邮件字段,任何帮助都非常感谢,因为我是 YII 的新手
用户.php
class Users extends CActiveRecord
{
public $cpassword;
public static function model($className=__CLASS__)
{
return parent::model($className);
}
public function tableName()
{
return 'users';
}
public function rules()
{
// NOTE: you should only define rules for those attributes that
// will receive user inputs.
return array(
array('email, password, user_type , cpassword','required'),
array('email', 'length', 'max'=>200),
array('email', 'unique'),
array('email', 'email'),
array('password', 'length', 'max'=>300),
array('cpassword', 'length', 'max'=>300),
array('user_type', 'length', 'max'=>5),
array('cpassword', 'compare', 'compareAttribute' => 'password'),
// The following rule is used by search().
// Please remove those attributes that should not be searched.
array('id, email, password, user_type ', 'safe', 'on'=>'search'),
);
}
public function relations()
{
return array(
);
}
public function attributeLabels()
{
return array(
'id' => 'ID',
'email' => 'Email',
'password' => 'Password',
'user_type' => 'User Type',
'cpassword' => 'Confirm Password'
);
}
public function search()
{
// Warning: Please modify the following code to remove attributes that
// should not be searched.
$criteria=new CDbCriteria;
$criteria->compare('id',$this->id);
$criteria->compare('email',$this->email,true);
$criteria->compare('password',$this->password,true);
$criteria->compare('user_type',$this->user_type,true);
return new CActiveDataProvider($this, array(
'criteria'=>$criteria,
));
}
public function beforesave()
{
$this->password=md5($this->password);
return true;
}
}
【问题讨论】:
-
您是否希望根据输入的电子邮件地址检查用户是否存在?
-
没错,但是如何只检查一个字段;为同一张表创建不同模型的好方法吗
-
您可以使用场景,即基于不同场景的不同验证规则,例如创建新记录与更新现有记录有不同的规则。您可以在此处阅读有关场景的信息 - yiiframework.com/wiki/266/understanding-scenarios