Yii2-更新不';行不通

Yii2-更新不';行不通,yii,yii2,Yii,Yii2,我正在尝试更新两个字段,但由于某些原因更新不起作用。 方法如下: public function actionChangepassword() { $model = $this->findModel(Yii::$app->user->identity->id); $model->scenario = 'changepassword'; if (Yii::$app->request->isAjax

我正在尝试更新两个字段,但由于某些原因更新不起作用。 方法如下:

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;
    });

结果我得到了true,这意味着它本身的函数正在工作,但密码和salt没有更新(我尝试了$model->save(),但结果是一样的)。我做错了什么?

可能是因为这两行:

if(ActiveForm::validate($model))
    return ActiveForm::validate($model);
在这里,您要检查模型数据是否有效,当模型数据有效时,您只需返回true,这可能是您的意思

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

并在模型数据无效时返回。同时查看
返回'true'首先返回字符串“true”而不是布尔值true,如果要将ajax请求与JSON一起使用,则需要添加选项

$.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;

使用布尔值时出现语法错误“true”