Arrays in <f:form.select> ausgeben

Markus Meier TYPO3, extbase/fluid

Select-ViewHelper von fluid

Der Select-ViewHelper von fluid hat einen kleines Problem: Die Attribute "optionLabelField" und "optionValueField" lassen sich nicht auf mehrdimensionale Arrays anwenden. (Im unserem Beispiel "label" und "value")

Die einzelnen Options der Select-Box müssen Objekte mit entsprechenden Getters sein. In unserem Fall wäre das eine Klasse mit getLabel- und getValue-Methoden.

<f:form enctype="multipart/form-data">
  <f:form.select name="myOption" options="{options}" optionLabelField="label" optionValueField="value" value="{myOption}" />
  <f:form.submit value="Go" />
</f:form>

Das folgende Array funktioniert also nicht

$options = array(
  array("label" => "Hello", "value" => "World",
  array("label" => "Foo", "value" => "Bar"
);
$this->view->assign('options', $options);

Um nicht extra irgendwelche Dummy-Klassen zu bauen, gibt es im PHP einen kleinen aber sehr wirkungsvollen Trick:
Indem man vor dem array(....) den Cast (object) definiert, wird das Array automatisch in ein Objekt vom Typ stdClass umgewandelt.

$options = array(
  (object) array("label" => "Hello", "value" => "World",
  (object) array("label" => "Foo", "value" => "Bar"
);
$this->view->assign('options', $options);

Da das Array "options" nun Objekte enthält, funktionieren auch die ViewHelper-Attribute "optionLabelField" und "optionValueField". (Selbst ohne Getter)

Viel Spaß!!!