Yii2 speichern von array von Formular-Feldern in ein einziges Datenbank-Feld
Wie kann ich ein array von Feldern in Yii2 die aktuelle/Standard-setup funktioniert nur für den Bereich die nicht-array.
Unten sind die Formularfelder, die ich brauche, um zu speichern in einem Feld:
<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>
Aktuellen Controller (I wissen müssen wie kann ich in einer Schleife durch array und speichern sowie das speichern von anderen normalen Felder in meinem Formular):
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,
]);
}
}
Du musst angemeldet sein, um einen Kommentar abzugeben.
In meinem Fall habe ich nicht brauchen, um änderungen an den controller überhaupt.
Können Sie nur ein Feld in deiner db-Datensatz, so etwas wie " config_json` und definieren Sie eine virtuelle property mit getter und setter im Modell.
Auch Ihr virtuelles Eigentum zu sein, sicher in den Regeln so Massiv Zuweisung funktioniert.
Jetzt können Sie Eingaben wie diese aus Ihrer Sicht
können Sie loadMultiple(), Blick auf diese
dies ist zur tabellarischen/multiple-input.
Sonst laden die modalen müssen Sie die load($_POST[your_form_name].
Modelle
- controller
machen wird:
Bitte beachten Sie doppelte eckige Klammern in
($form, 'email[]')
.ID-Attribut muss explizit festgelegt werden, einzigartig, sonst doppelte IDs machen wird, die nicht in übereinstimmung mit W3C/javascript-standards.
statt speichern in array speichern können Sie im string zu verwenden tne Variablen wie gewohnt in der Sicht ex:
fieldofarray
stattfieldofarray[]
,und in die controller verwenden, die implode-Funktion, ex: