Zum Inhalt springen

fluid form select und prependOptionLabel/Value

Erstellt am 9. Februar 2015 · 5 Antworten · letzte Antwort am 18. Februar 2015

Tags: Frage

HH ·

Hallo,
ich versuche mich gerade an einer Extension. Dazu habe ich im Frontend ein Formular mit einem Selectfeld. Die Werte aus des Selectfelds kommen aus einer Klasse/Tabelle.
Jetzt wollte ich als ersten Wert ein "-----" einfügen (es handelt sich nicht um ein Pflichtfeld).

Das funnktioniert im template auch soweit ganz gut mit prependOptionLabel und Value.
Nur beim abschicken des Formulars meckert Extbase.
Den Wert (leeren Wert oder 0) der übergeben wird ist keine Instanz der Klasse (sowas in der Art)
Ist ja auch klar....kann ich nicht einfach was leeres, also nichts ausgewählt übergeben?
Denkfehler?
Danke!

Unbekannter Benutzer ·

Reicht es eventuell schon, die Validierung der Parameter der aufgerufenen Action auszuschalten? Zusätzlich eventuell den Default-Wert für den Parameter auf NULl setzen. Dann könntest du in deiner Action nochmal eine Abfrage machen, ob der übergebene Wert NULL ist oder nicht, und dementsprechend deine Funktionen aufrufen.

HH ·

Danke für die Antwort,
Ich erweitere mit meiner Extension den femanager, d.h. das ist mir dann zu kompliziert die action zu überschreiben.
dann mach ich vorher nen eintrag "-----" mit 0 oder so, also ohne prepenOptin
danke

harald1972 ·

Moin,

keine Ahnung, ob das deine Frage beantwortet. B-) Allerdings glaube ich, daß es wenigstens in die Richtung geht.
In der Hoffnung, daß es hilft, poste ich das mal. Ich hab hier mal einen SelectViewHelper um ein "Null-Feld" erweitern müssen.

1. Eigenen ViewHelper schreiben - das ist wesentlich einfacher als viele denken, und es ist sauber -
und zwar ableiten von \TYPO3\CMS\Fluid\ViewHelpers\Form\SelectViewHelper
2. Darin die getOptions-Methode überschreiben:

protected function getOptions() {
    $options = array(0 => '----');                  // hier kommt der Null-Wert
    foreach($this->arguments['options'] as $option) {  // und dann alle anderen
      if($option instanceof \Your\Own\Domain\Model\Class)    // zur Sicherheit
        $options[$option->getUid()] = $option->getName();
    } 
    return $options;
  }

Je nach deinen Anforderungen (die ich jetzt nicht kenne), kannst du auch noch getSelectedValue() oder andere überschreiben.

Gruß Harald

HH ·

Hallo Harald,
danke für die Antwort,
sehe ich das richtig das dein Viewhelper mir lediglich ein "-----" an den Anfang des Arrays stellt?
Das funktioniert prinzipiell auch schon mit der Prependoption.
Mein Problem war, dass (wird kein Wert ausgewählt, also 0 übergeben)
ich einen Fehler bekomme da 0 keine Instanz der der Klasse ist. Also den Wert 0 habe ich nicht als Datensatz im Backend eingegeben.
Ich denke da muss ich tatsächlich dann den Wert 0 in der Createaction abfaangen....
Danke nochmals!

harald1972 ·

Hallo nochmal,

ja klar. Ich erweitere das $options-Array um ein Null-Element.
Ich hab die 0 auch nicht im Datensatz - sonst wäre sie ja schon bei den $options dabei.

Im Fall der 0 musst du eben keine Zuordnung machen - geht ja, weil kein Pflichtfeld - wenn $uid = 0 nicht existiert.
... also eben in der createAction abfangen.

Viel Spaß! B-)

P.S.: Ich mach gern eigene ViewHelper. Die es schon gibt, sind ja meistens gut und nützlich, aber wie so oft muss man was anpassen.