簡體   English   中英

當字段具有初始值時,在Yii2中獲取使用ActiveForm制作的表單以填充關於錯誤的POST數據

[英]Getting forms made with ActiveForm in Yii2 to populate POST data on errors when fields have initial values

我已經使用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值的情況下自動加載這些值。

...除非有更簡單/更好的方法?

一種選擇是檢查它是否具有已加載的值,如果沒有,則在params中設置該值:

$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
           ]);
     }
}

在這種情況下,提交表單后,您將從更改的輸入中獲取值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM