Formulare mit Extbase und Fluid: Unterschied zwischen den Versionen
| Zeile 34: | Zeile 34: | ||
</pre> | </pre> | ||
Extbase vergleicht dabei zusätzlich automatisch die Felder aus dem Formular mit dem Model '''validiert automatisch'''. | Extbase vergleicht dabei zusätzlich automatisch die Felder aus dem Formular mit dem Model '''validiert automatisch'''. | ||
| + | |||
| + | == Tipps und Tricks == | ||
| + | === Typo3/Fluid: Verschiedene Models über ein Formular bedienen === | ||
| + | Quelle: | ||
| + | |||
| + | Dank der form-ViewHelper lassen sich Formulare mittels Extbase/Fluid recht zügig umsetzen. Bei komplexeren Szenarien, bei denen in einem Formular mehrere verschiedene Models bedient werden sollen, stellt sich jedoch die Frage, wie sich dies umsetzen lässt. | ||
| + | |||
| + | Die Lösung liegt darin, mit “namebased input”-Felder zu arbeiten. Statt also wie üblich eine Eigenschaft im Fluid-Formular per “property”-Attribut an ein Objekt zu binden, definiert man stattdessen die Argumente “name” und “value” manuell. | ||
| + | |||
| + | Ein Beispiel. Ein Formular ist per “object”-Attribut an ein Objekt “schornsteinfeger” gebunden. Soll im Formular nun gleichzeitig eine Eigenschaft “aussentemperatur” eines Objekts “wetter” bedient werden, könnte das Ganze etwa so aussehen: | ||
| + | |||
| + | <pre> | ||
| + | <f:form method="post" action="create" name="schornsteinfeger" enctype="multipart/form-data" object="{schornsteinfeger}"> | ||
| + | <f:form.textbox name="wetter[aussentemperatur]" value={wetter.aussentemperatur} /> | ||
| + | </f:form> | ||
| + | </pre> | ||
Version vom 3. März 2015, 08:27 Uhr
Links
http://docs.typo3.org/typo3cms/ExtbaseGuide/Fluid/ViewHelper/Form/Index.html
Überblick
- Falls nicht vorhanden gewünschte Action registrieren (localconf) und im Controller anlegen
- Fluid Form erstellen
- Mit Absenden oder AJAC Call ausführen
Formular Felder im Fluid Template
Form Tag
<f:form action="BestimmteFormAction" controller="BestimmterControllerName" extension="AndererExtensionName" enctype="multipart/form-data"> Form-Felder </f:form>
Beispiel
<f:form action="create" object="{newProject}">
Projektname: <f:form.textbox property="name" />
<f:form.submit value="Speichern" />
</f:form>
Das Controller Attribut benötigt man nur dann, wenn der Controller der die Daten auswerten soll nicht zum aktuellen View gehört.
Name Attribute
Das name-Attribut wird automatisch für das Plugin passend umgewandelt.
<f:form.textfield name="myField" />
wird zu
<input type="text" name="tx_registierung_pi1[myField]" />
Sendet das Formular nun z.B. an einen Controller: showAction, stehen die Werte als Argumente zur Verfügung:
public function showAction() {
$args = $this->request->getArguments();
echo $args['myField];
}
Extbase vergleicht dabei zusätzlich automatisch die Felder aus dem Formular mit dem Model validiert automatisch.
Tipps und Tricks
Typo3/Fluid: Verschiedene Models über ein Formular bedienen
Quelle:
Dank der form-ViewHelper lassen sich Formulare mittels Extbase/Fluid recht zügig umsetzen. Bei komplexeren Szenarien, bei denen in einem Formular mehrere verschiedene Models bedient werden sollen, stellt sich jedoch die Frage, wie sich dies umsetzen lässt.
Die Lösung liegt darin, mit “namebased input”-Felder zu arbeiten. Statt also wie üblich eine Eigenschaft im Fluid-Formular per “property”-Attribut an ein Objekt zu binden, definiert man stattdessen die Argumente “name” und “value” manuell.
Ein Beispiel. Ein Formular ist per “object”-Attribut an ein Objekt “schornsteinfeger” gebunden. Soll im Formular nun gleichzeitig eine Eigenschaft “aussentemperatur” eines Objekts “wetter” bedient werden, könnte das Ganze etwa so aussehen:
<f:form method="post" action="create" name="schornsteinfeger" enctype="multipart/form-data" object="{schornsteinfeger}">
<f:form.textbox name="wetter[aussentemperatur]" value={wetter.aussentemperatur} />
</f:form>