2015-07-03 87 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;