Yii2 - 更新不起作用

时间:2015-07-03 17:20:51

标签: yii 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;
    });

结果是 true ,这意味着它自己正在运行的功能,但密码和盐没有更新(我尝试使用 $ model-> save() ,但结果是一样的)。我做错了什么?

2 个答案:

答案 0 :(得分:1)

可能是因为这两行:

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

在这里你要检查模型数据是否有效,当它有效时你只需返回 true ,也许你的意思是

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

并在模型数据无效时返回。另请查看return 'true';返回字符串' true'而不是布尔 true

答案 1 :(得分: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;