[英]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.