2014-01-17 66 views
0

我是Yii的新手。我創建了密碼更改表單,頁面名稱更改。在該頁面中有三個字段舊密碼,新密碼和確認新密碼字段。Yii驗證的模型規則不起作用

我的規則

public function rules() { 
    return array(
     array('old_password, confirm_password, str_user_password', 'required', 
      'on' => 'change'), 
     array('confirm_password', 'compare', 'compareAttribute' => 'str_user_password', 
      'message' => 'Password Must Be same.', 'on' => 'change'), 
    ); 
} 

控制器

public function actionChange($id) 
    { 
     $model=new User('change'); 
     //$model->setScenario('change'); 
     $model=$this->loadModel($id); 
     if(isset($_POST['User'])) 
      { 
       $model->attributes=$_POST['User']; 
       if($model->save()) 
       $this->redirect(array('view','id'=>$model->int_user_id)); 

      } 

     $this->render('change',array(
      'model'=>$model, 
     )); 
    } 

創建和更新頁面的驗證工作。我已經將它複製到更新頁面,它正在完美地工作。我認爲這是場景問題。請幫我找到一個解決方案。

+0

我認爲問題放在上面不是設置場景你loadModel位置。 loadmodel創建新模型,並且您的模型場景被此 –

+0

@naveengoyal nope覆蓋。我認爲它不會解決問題。 –

+0

你可以發佈表單和整個模型類嗎? –

回答

0

您必須確認密碼字段比較新密碼:

array('confirm_password', 'compare', 'compareAttribute' => 'new_password', 
     'message' => 'Password Must Be same.', 'on' => 'change'), 

array('new_password', 'compare', 'compareAttribute' => 'confirm_password', 
     'message' => 'Password Must Be same.', 'on' => 'change'), 
1

嘗試...... 我覺得負荷模型創建覆蓋您的方案新模式。

$model=$this->loadModel($id); 
    $model->setScenario('change'); 
+0

+1歡呼:) ... –

+0

謝謝你解決問題 –

+0

@JeminJames - 接受答案,如果它解決了你的問題 – Lodder