Hallo,
ich habe ein Bestellformular gemacht, mit folgenden Objekten:
- Booking: Besteht aus diversen Eingabefeldern und 1:n Relation zu Position.
- Position: Besteht aus einem Feld 'quantity' und n:1 Relation zu Product.
- Product: Besteht aus diversen Feldern wie title, price,...
Im Frontend nutze ich Booking=>new,create für ein Bestellformular. Oberhalb der Bestell-Formularfelder gebe ich alle Products aus. Jedes Product hat ein Eingabefeld für die Bestellmenge (quantity).
Mit Absenden des Formulares, soll somit das Booking gespeichert werden und weiters alle Positions (mit quantity und product-relation).
Das Fluid dazu sieht so aus:
<f:form.hidden property="positions.{product.uid}.product" value="{product.uid}" />
<f:form.textfield property="positions.{product.uid}.quantity" type="number" value="0" />
Die Action im Controller so:
/**
* action new
*
* @param \XXX\Extkey\Domain\Model\Booking $newBooking
* @ignorevalidation $newBooking
* @return void
*/
public function newAction(\XXX\Extkey\Domain\Model\Booking $newBooking = NULL) {
$products = $this->productRepository->findCheaperThan($this->settings['cheaperThan']);
$this->view->assign('products', $products);
}
So, nun zum Problem:
Wenn ich das Formular absende und alle Pflichtfelder befülle, funktioniert alles perfekt. Es wird alles wie gewünscht in die Datenbank gespeichert.
Wenn ich allerdings ein Pflichtfeld leer lasse, erscheint bei den Produkten folgender Fehler, anstatt des quantitiy Eingabefeldes: Quantity No value found for key "TYPO3\CMS\Fluid\ViewHelpers\FormViewHelper->formObject"
Mein Verdacht: Da es mehrere Produkte gibt, werden ja je Bestellung genauso viele Positions angelegt. Damit sich die einzelnen Positions nicht gegenseitig überschreiben, ist also ein Array nötig. Dieses habe ich in Fluid mit der {product.uid} geschafft, zb hier im property:
<f:form.hidden property="positions.{product.uid}.product" value="{product.uid}" />
Nach dem Absenden existiert die Position mit der Product uid aber nicht. Nur welche fortlaufende ID ist hier die korrekte? Ein iterator in f:for-Tag liefert das gleiche Ergebnis bzw. Problem.
Ich hoffe ich konnte das Problem gut erläutern und jemand kann mir weiterhelfen.
Danke und liebe Grüße
Gernot