Yii2 表单提交疑难解答



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

在 ProfileController 文件中,我有 Index 操作,它处理用户信息,理论上也处理表单:

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>

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

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

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

方法save()自动调用方法validate()。如果只想在验证此模型时对此模型进行操作,也可以自行调用它。

最新更新