我已经使用 ActiveForm 和 Yii2 设置了许多表单,它总是用正确的错误$_POST
数据填充字段,但是我对最初填充数据的表单执行此操作时遇到了问题,例如想要更新现有值的用户 - 提交时,如果他们收到错误,字段始终包含初始值而不是$_POST
值。
这是我的表单示例:
$form = ActiveForm::begin();
<?=$form->field($model, 'site_url', ['inputOptions' => ['value' => Yii::$app->params['settings']['site_url']]]); ?>
ActiveForm::end();
我希望 Yii 会自动覆盖初始值,因为它是一个 POST 并使用模型$site_url
属性的值,但不幸的是情况并非如此。
有没有简单的方法来解决这个问题?我想到的一种可能方法是避免通过字段设置值,而是将模型属性值设置为初始值,然后 Yii 应该自动加载这些值,并在发布时具有$_POST
值。
。除非有更简单/更好的方法?
一种选择是检查它是否有加载的值,如果没有,我会在参数中设置值:
$form->field($model, 'site_url',
['inputOptions' =>
['value' => (!empty($model->site_url) ?
$model->site_url : Yii::$app->params['settings']['site_url']]]);
在将模型传递给查看之前,控制器中的明确值...例如
// If you using existing model, in this example update action
public function actionUpdate($id)
{
$model = $this->findModel($id);
$model->site_url = 'your value';
if ($model->load(Yii::$app->request->post()) && $model->save()) {
....
return $this->redirect(['view', 'id' => $model->id]);
} else {
return $this->render('update', [
'model' => $model
]);
}
}
// If you creating new model and passing values to attributes
public function actionCreate($id)
{
$model = new Model;
$model->site_url = 'your value';
if ($model->load(Yii::$app->request->post()) && $model->save()) {
....
return $this->redirect(['view', 'id' => $model->id]);
} else {
return $this->render('create', [
'model' => $model
]);
}
}
在这种情况下,当提交表单时,您将从更改的输入中获取值。