How can I save an array of fields in Yii2 the current/default setup only works for field which aren't array.
Below are the form fields I need to save into the single field:
<div class="repeat">
<table class="wrapper" width="100%">
<thead>
<tr>
<td width="10%" colspan="4"><span class="add">Add</span></td>
</tr>
</thead>
<tbody class="container">
<tr class="template row">
<td width="10%"><span class="move">Move</span></td>
<td width="10%">An Input Field</td>
<td width="70%">
<?= $form->field($model, 'field1ofarray[{{row-count-placeholder}}]')->textInput(['maxlength' => 255])->label('Field Label') ?>
<?= $form->field($model, 'fieldofarray[{{row-count-placeholder}}]')->textInput(['maxlength' => 255])->label('Som field') ?>
<?= $form->field($model, 'field3ofarray[{{row-count-placeholder}}]')->textInput(['maxlength' => 255])->label('Field Label') ?>
<?= $form->field($model, 'field4ofarray[{{row-count-placeholder}}]')->dropDownList(['instock' => 'Instock', 'soldout' => 'Sold Out', 'scheduled' => 'Scheduled']); ?>
</td>
<td width="10%"><span class="remove">Remove</span></td>
</tr>
</tbody>
</table>
Current Controller (I need to know how I can loop through array and save as well as saving other normal fields in my form):
public function actionCreate()
{
$model = new GrailWall();
if ($model->load(Yii::$app->request->post()) && $model->save()) {
return $this->redirect(['view', 'id' => $model->id]);
} else {
return $this->render('create', [
'model' => $model,
]);
}
}
models
controller
you can use loadMultiple(), look at this
this is about tabular/multiple input.
Otherwise load the modal you need using load($_POST[your_form_name].
In my case I didn't need to make any changes to the controller at all.
You can just make a field in your db record, something like 'config_json` and then define a virtual property with getter and setter in your model.
Also set your virtual property to be safe in the rules so Massive Assignment works.
Now you can set inputs like this in your view
will render:
Please note double square brackets in
($form, 'email[]')
. ID attribute must be set explicitly unique, otherwise duplicate IDs will render, which does not conform with W3C/javascript standards.instead saving in array you can save in string, to that use tne variables as normal in the view, ex:
fieldofarray
insteadfieldofarray[]
,and in the controller use the implode function, ex: