Yii2表格提交故障排除

时间:2017-03-24 10:22:17

标签: php forms yii2

所以我在页面上显示已记录用户的信息,然后是一个可用于更改基本用户信息的表单,例如电子邮件地址,用户名等。

在ProfileController文件中,我有索引操作,它处理用户信息,理论上也是表格:

public function actionIndex() {

    $user = User::find()->where(['id' => Yii::$app->user->identity->id])->one();

    if ($user->load(Yii::$app->request->post())) {
        $user->save();
        //var_dump($user->first_name);die;
    } 

    return $this->render('index', [ 
            'user' => $user,
    ]);
}

在索引视图文件中,我正在显示以下表单:

                 <div class="row form">

                    <div class="user-form col-md-8 col-md-offset-2">
                        <?php $form = ActiveForm::begin(); ?>

                        <?= $form->field($user, 'last_name')->textInput(['maxLength' => true]) ?>

                        <?= $form->field($user, 'first_name')->textInput(['maxLength' => true]) ?>

                        <?= $form->field($user, 'email')->textInput(['maxLength' => true]) ?>

                        <?= $form->field($user, 'image')->textInput([]) ?>

                        <div class="form-group">
                            <?= Html::submitButton('Submit', ['class' => 'btn btn-success']) ?>
                        </div>

                        <?php ActiveForm::end(); ?>
                    </div>

                </div>

问题是,每当我按下表单下方的提交按钮时,控制器都会收到发布请求,但不会更新表单字段中给出的新值,从而在var_dump()中显示旧信息。我该怎么办?

1 个答案:

答案 0 :(得分:0)

可能验证失败。这样做的正确方法是:

// ...
if ($user->load(Yii::$app->request->post())) {
    if ($user->save()) {
        // validated and saved, check $user state now
    }
} 

方法save()自动调用方法validate()。如果您只想在经过验证的情况下操作此模型,您也可以自己调用它。