在 Yii2 中使用 ActiveForm 制作表单,以便在字段具有初始值时填充错误时的 POST 数据



我已经使用 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
           ]);
     }
}

在这种情况下,当提交表单时,您将从更改的输入中获取值。

最新更新