[Frage] Zusätzliches Feld im Fluid Form, das aber keine Property sein soll [Gelöst]

  • Michaelh74 Michaelh7...
    Jedi-General
    0 x
    1519 Beiträge
    0 Hilfreiche Beiträge
    17. 10. 2013, 16:17

    Hallo zusammen,

    wenn ich in Extbase mit einem Fluid in meiner Extension z.B. einen User anlegen will und ein weiteres Feld ausschließlich in das Formular hinzufüge, versucht Extbase das ja direkt zu mappen (z.B. Passwort Bestätigung). Wie gehe ich am besten vor, wenn ich weitere Felder im Formular benötige, dies aber keine Properties von meinem Object sind?

    Vielen Dank für jeden Denkanstoß!
    Michael

  • harald1972 harald197...
    Sternenflotten-Admiral
    0 x
    198 Beiträge
    13 Hilfreiche Beiträge
    18. 10. 2013, 14:31 - Lösung

    Ohne jetzt einen Ahnung davon zu haben, was es mit den "internen Argumenten" auf sich hat...

    Wenn du in den Form-Element-VH property verwendest, wird das entsprechende Element auf dein Objekt gemappt, welches auch im Form-VH selbst als object angegeben ist.

    Also bei so einem Formular... Es soll hier ein Objekt user geben mit einem Attribut pwd.

    1. <f:form action="create" name="user" object="{user}" >
    2. <f:form.textfield property="pwd" />
    3. </f:form>

    sieht der HTML-output für das Textfeld so aus:

    1. <input type="text" name="tx_extname_piname[user][pwd]" />

    Wenn ich dich richtig verstanden hab, willst du aber etwas in der Art:

    1. <input type="text" name="tx_extname_piname[pwd]" />

    Dazu musst du (wie in Axels Beispiel) einfach nur name anstatt property verwenden.

    1. <f:form.textfield name="pwd" />


  • 1
  • awuestemann awuestema...
    TYPO3-Anwärter
    0 x
    6 Beiträge
    1 Hilfreiche Beiträge
    17. 10. 2013, 19:59

    In Typo3 Flow geht es mit "interne Agrumenten", gekennzeichnet durch zwei Unterstriche.

    1. // do we have a new xxx value?
    2. if ($this->request->getInternalArgument('__xxx') !== '')
    3. {
    4. $newYYY->setXxx($this->request->getInternalArgument('__xxx'));
    5. }

    Im Formular:

    1. <f:form.textfield name="__xxx" placeholder="neuer Wert für xxx" />

    Vielleicht hilft's

    Axel

  • harald1972 harald197...
    Sternenflotten-Admiral
    0 x
    198 Beiträge
    13 Hilfreiche Beiträge
    18. 10. 2013, 14:31

    Ohne jetzt einen Ahnung davon zu haben, was es mit den "internen Argumenten" auf sich hat...

    Wenn du in den Form-Element-VH property verwendest, wird das entsprechende Element auf dein Objekt gemappt, welches auch im Form-VH selbst als object angegeben ist.

    Also bei so einem Formular... Es soll hier ein Objekt user geben mit einem Attribut pwd.

    1. <f:form action="create" name="user" object="{user}" >
    2. <f:form.textfield property="pwd" />
    3. </f:form>

    sieht der HTML-output für das Textfeld so aus:

    1. <input type="text" name="tx_extname_piname[user][pwd]" />

    Wenn ich dich richtig verstanden hab, willst du aber etwas in der Art:

    1. <input type="text" name="tx_extname_piname[pwd]" />

    Dazu musst du (wie in Axels Beispiel) einfach nur name anstatt property verwenden.

    1. <f:form.textfield name="pwd" />

  • Michaelh74 Michaelh7...
    Jedi-General
    0 x
    1519 Beiträge
    0 Hilfreiche Beiträge
    18. 10. 2013, 15:27

    Hallo Axel, hallo Harald,

    vielen Dank für Eure Anworten. Werde die Flow Variante mal testen. Mal sehen, ob das auch in Extbase geht.

    Ansonsten klingt der Ansatz von Harald natürlich logisch. Nur Name => keine Property => kein Mapping.
    Wieso bin ich da nur nicht selbst drauf gekommen ...

    Vielen Dank noch mal für Eure Hinweise!
    Michael

  • harald1972 harald197...
    Sternenflotten-Admiral
    0 x
    198 Beiträge
    13 Hilfreiche Beiträge
    18. 10. 2013, 18:56

    Nachtrag:

    wenn du das so machst, wie ich es beschrieben hab, sollte die createAction (die ich ja im formular angegeben hab) derart aussehen:

    1. /**
    2.  * @param \ABC\XYZ\Domain\Model\User $user
    3.  * @param \string $pwd
    4.  */
    5. public function createAction(\ABC\XYZ\Domain\Model\User $user, $pwd){
    6. ...
    7. }

    D.h. was innerhalb der Form, aber nicht als Property (des User-Objekts) steht, bekommst du als Argument übergeben.

    ( ...und wenn du den \TYPO3\CMS\Extbase\Domain\Model\FrontendUser verwendest, musst du den selbstverständlich auch so benennen. Aber das sollte selbstverständlich sein B-) )

    Gruß

  • Michaelh74 Michaelh7...
    Jedi-General
    0 x
    1519 Beiträge
    0 Hilfreiche Beiträge
    21. 10. 2013, 18:26

    Hat auch genau so funktioniert.
    Trotzdem werde ich bei Gelegenheit auch mal den Ansatz von Axel / Flow testen.

    Viele Grüße
    Michael

  • 1