所以我在页面上显示登录用户的信息,后跟一个可用于更改基本用户信息的表单,例如电子邮件地址、用户名等。
在 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()
。如果只想在验证此模型时对此模型进行操作,也可以自行调用它。