问题捍卫
我有一个名为'user.php'的模型 我有一些验证规则如下 我现在要创建一个密码重置表单 在那种形式我有一个文本框名称电子邮件(在用户模型中使用相同的电子邮件) 在密码重置表单中我想检查这个用户是否已注册,如果已注册的用户将发送密码重置链接
我不知道如何撤销这个电子邮件领域,任何帮助都非常令人满意,因为我在YII时是新的
user.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;
}
}
答案 0 :(得分:6)
您可以通过以下内容查看提交内容:
$user = User::model()->find("email = '".trim($model->email)."'");
if (!empty($user)){
// users exists
} else {
// user does not exist
}
如果您真的想使用该模型,您可以设置一个规则,其中电子邮件必须是唯一的,如下所示:
array('email', 'unique', 'message' => 'Email already in use'),
然后,您可以检查模型是否在提交上验证,特别是电子邮件字段。如果它不验证电子邮件地址存在
最后,您可以验证单个模型属性,如下所示:
if($model->validate(array('attribute_name'))
// valid
}
以下是执行完整操作的一种方法(不是最好的方法,但最容易理解!)
public function actionResetpassword(){
$model = new User;
if(isset($_POST['User'])){
$model->attributes = $_POST['User']; // this is the form as completed by the user
$user = User::model()->find("email = '".trim($model->email)."'");
if (!empty($user)){
// send user their new email
$this->render("passwordreset"); // user exists, render confirmtion page
} else {
// user does not exist, render form and pass $error_message variable with messasge
$this->render("resetpassword",array(
"model" => $model,
"error_message" => "No such user found!",
));
}
} else {
// this will be rendered if the user has not submitted the form yet
$this->render("resetpassword",array(
"model" => $model,
));
}
}
答案 1 :(得分:0)
public function rules() {
$action = Yii::app()->controller->action->id;
if($action == 'login'){
return array(array('username,password', 'required'), array('password', 'length', 'min'=>6, 'max'=>12), array('rememberMe', 'boolean'), array('password', 'authenticate'), array('id, jsid, email, username, password, status', 'safe', 'on'=>'search'));
}else{
return array( array('oldpassword,password1,password2', 'required'), array('password1,password2, oldpassword', 'length', 'min'=>6, 'max'=>12),array('password1', 'compare', 'compareAttribute'=>'password2'), array('id, jsid, email, username, password, status', 'safe', 'on'=>'search'),);
}
}