Zum Inhalt springen

Verschachtelte Objekte mit FLUID

Erstellt am 22. September 2011 · 1 Antwort · letzte Antwort am 10. Oktober 2011

Tags: Frage

RockyWolverine ·

Hallo,

Wir arbeiten momentan an einer kleinen Extension. Dabei soll man Einträge bewerten können. Bewertet wird mit verschiedenen Kriterien, bei denen man 1 - 5 Punkte vergeben kann.

Das (vereinfachte) Datenmodell sieht wie folgt aus:

class Entry {
	protected $name;
	...
	protected $ratings;
}


class RatingCriterion {
	protected $name;
	protected $description;
}

class Rating {
	protected $entry;
	protected $user;
	protected ratingValues;
}

class RatingValue {
	protected $criterion;
	protected $value;
}

Nun möchte ich FLUID ein leeres Rating-Objekt übergeben, dieses beim Absenden des Formulars gefüllt zurückerhalten und direkt speichern.
Allerdings weiss ich nicht ob bzw. wie es möglich ist die einzelnen RatingValues per GET/POST übergeben, sodass Extbase mir diese als Collection(ObjectStorage) des Rating-Objekts erkennt.

Etwa so:

<f:form method="post" action="create" object="newRating"  name="newRating">
	<f:for each="{ratingCriterions}" as="ratingCriterion">
		
		<label>{ratingCriterion.name}</label>
		
		<f:form.radio property="newRating.ratingValues[].value" value="5" />
		<f:form.radio property="newRating.ratingValues[].value" value="4" />
		<f:form.radio property="newRating.ratingValues[].value" value="3" />
		<f:form.radio property="newRating.ratingValues[].value" value="2" />
		<f:form.radio property="newRating.ratingValues[].value" value="1" />
	
	</f:for>
</f:form>

Vielen Dank für eure Hilfe 😉

RockyWolverine ·

Konnte es nun mithilfe des "iteration"-Arguments des For-Viewhelpers lösen.

<f:form method="post" action="create" object="newRating" name="newRating">
	<f:for each="{criterions}" as="criterion" iteration="criterionIterator">

	<label> {criterion.name} </label>

	<f:form.hidden property="newRating.ratingValues.{criterionIterator.index}.criterion" value="{criterion.uid}"/>
					<td>
	<f:form.radio property="newRating.ratingValues.{criterionIterator.index}.value" value="1" />
	
	<f:form.radio property="newRating.ratingValues.{criterionIterator.index}.value" value="2" />

	<f:form.radio property="newRating.ratingValues.{criterionIterator.index}.value" value="3" />

	<f:form.radio property="newRating.ratingValues.{criterionIterator.index}.value" value="4" />

	<f:form.radio property="newRating.ratingValues.{criterionIterator.index}.value" value="5" />

</f:for>

"criterionIterator.index" ist der Iterationszähler beginnend bei 0.

Gruss Marc