2015-07-03 88 views
-1

我試圖更新兩個字段,但由於某種原因更新不起作用。 這是方法:Yii2 - 更新不起作用

public function actionChangepassword() 
    { 
     $model = $this->findModel(Yii::$app->user->identity->id); 

     $model->scenario = 'changepassword'; 

     if (Yii::$app->request->isAjax && $model->load(Yii::$app->request->post())): 
      Yii::$app->response->format = Response::FORMAT_JSON; 

      if(ActiveForm::validate($model)) 
       return ActiveForm::validate($model); 

      $model->salt  = Yii::$app->security->generateRandomString(32); 
      $model->password = Yii::$app->security->generatePasswordHash($model->salt . $model->password_new); 

      $model->update(); 

      return 'true'; 
     endif; 

     return $this->renderAjax('changePassword', 
       [ 'model' => $model] 
      ); 
    } 

和JS功能:

$('body').on('beforeSubmit', '#changePassword', function(event, jqXHR, settings) { 
     var form = $(this); 
     if(form.find('.has-error').length) { 
       return false; 
     } 

     $.ajax({ 
       url: form.attr('action'), 
       type: 'post', 
       data: form.serialize(), 
       success: function(data) { 
         // do something ... 
       } 
     }); 

     return false; 
    }); 

我得到真正的結果,這意味着該函數它的自我是工作,但密碼和鹽不更新(我試過$ model-> save(),但結果是一樣的)。我究竟做錯了什麼?

+0

你有一個語法錯誤「真」使用布爾 –

回答

1

這可能是因爲這兩條線路:

if(ActiveForm::validate($model)) 
    return ActiveForm::validate($model); 

這裏你正在檢查,如果模型數據是有效的,而當它是有效的,你只是回到真正,也許你的意思是

//the ! sign is missed 
if(! ActiveForm::validate($model)) 

並在模型數據無效時返回。另外,也要看看return 'true';,你返回字符串「真」,而不是布爾真正

0

首先,如果你想使用JSON Ajax請求,您需要添加選項

$.ajax({ 
    ... 
    dataType: 'json', 
    ... 
}); 

其次,我們仍然希望JSON數據

return ActiveForm::validate($model); // returns boolean 
return 'true'; // returns string 

你需要JSON,

return \yii\helpers\Json::encode([ 
    'success' => true // or something 
]); 

第三,我想你的意思

if(!ActiveForm::validate($model)) 
    return false;