Hallo,
ich versuche gerade folgendes zu Lösen: Ein Benutzer kann, abhängig von seiner Berechtigung, eine Anzahl von X Foo-Objekte erstellen/bearbeiten. Das will ich über den FormBuilder lösen. Dabei soll für jedes Objekt ein eigener Tab-Container existieren mit genau demselben Formular.
Jetzt wäre meine Frage, wie ich das von der Datenstruktur an besten löse.
Eine Idee wäre beispielsweise mit Suffixen + einem hidden-Input für die IDs (wenn vorhanden) zu arbeiten. Grob gesagt (nicht getestet):
PHP
protected function createForm() {
parent::createForm();
$tabMenu = TabMenuFormContainer::create('foos');
$this->form->appendChild($tabMenu);
$i = 1;
while ($foos as $foo) {
$this->addTab($tabMenu, $foo, $i);
$i++;
}
}
private function addTab(TabMenuFormContainer $tabMenu, ?Foo $foo, int $i) {
$dataTab = TabFormContainer::create('fooForm' . $i);
$dataTab->label('wcf.global.form.data');
$tabMenu->appendChild($dataTab);
$dataContainer = FormContainer::create('foo' . $i)
->label('wcf.global.form.data')
->appendChildren([
TextFormField::create('name' . $i)
->label('wcf.acp.devtools.project.name')
->required(),
HiddenFormField::create('id' . $i)
->value(($foo) ? $foo->fooID : 0)
// ... add more inputs
]);
$dataTab->appendChild($dataContainer);
}
Display More
Problem ist dann aber, dass $this->form->getData() die Daten nicht gruppiert pro Foo zurück gibt und die Verarbeitung etwas nervig ist:
Hier gibt es doch bestimmt eine sauberere Lösung, oder? Jemand eine Idee?
Grüße