Zum Inhalt springen

f:from.select zum Auswählen und Übergeben eines Modellobjekts

Erstellt am 9. Juli 2012 · 3 Antworten · letzte Antwort am 12. Juli 2012

Tags: Fluid, Frage

robsch ·

Hi,

ich check's irgendwie nicht. Ich würde gerne eine Select-Box anzeigen, in der ein Modellobjekt ausgewählt werden kann. Das ausgewählte Objekt sollte an eine Action übergeben werden, was aber scheinbar nicht passiert.

Fluid:

<f:form action="import" name="configuration" object="{configuration}">
  <f:form.select property="configuration"
                 value="{configuration}" 
                 options="{availableConfigurations}"
                 optionValueField="uid"
                 optionLabelField="name" />
  <f:form.submit name="submitButton" value="Start" />	
</f:form>

Befüllt wird die Select-Box hiermit:

$rep = t3lib_div::makeInstance('Tx_Bla_Domain_Repository_ConfigurationRepository');
$availableConfigurations = $rep->findAll();
$this->view->assign('availableConfigurations', $availableConfigurations);

Das Befüllen klappt scheinbar auch, weil die Select-Box Einträge enthält. Das ist aber alles. {configuration} befülle ich im Template nicht. MÜsste ich das? Wenn ja, mit was?

Nun die Action:

/**
 * action import
 *
 * @param Tx_Bla_Domain_Model_Configuration $configuration
 * @return void
 */
public function importAction(Tx_Bla_Domain_Model_Configuration $configuration) {
...
}

Die Fehlermeldung, die ich nun erhalte ist:

#1251730701: The value must be of type "Tx_Bla_Domain_Model_Configuration", but was of type "NULL".<p>Property 'configuration' could not be set. (#1236783102)</p>

Was mache ich falsch? Oder geht das so vielleicht gar nicht? Ich finde es eigentlich auch nicht logisch, denn in der Form steht ja object="{configuration}" - da bezieht man sich beim property-Attribut im form.select doch genau auf dieses Objekt. Das kann doch nicht einfach ersetzt werden. Es ist doch dieses Objekt, dass an die Action weitergeleitet wird. Und eigentlich wird es ja nicht mal mit assign gesetzt. Hm, ich verstehe das gar nicht.

Muss ich vielleicht doch mit $this->request->getArgument('configuration') in der Action arbeiten?

robsch ·

Kennt sich keiner aus? Ich hätte gedacht, dass das eigentlich ganz einfach zu beantworten wäre...

ralfbs ·

Hi,
Was magst Du mit der Zeile

robsch schrieb

value="{configuration}"

eigentlich erreichen?
Lass diese mal raus, dann sollte die Auswahl angezeigt werden.
In der Auswahl vorhanden sind ja options, optionLabelField, optionValueField - ggf. kannst Du name="foo" hinzufügen...

robsch ·

Hallo ralfbs,

mit name="configuration" scheint es tatsächlich zu gehen! 😃

Das mit value="{configuration}" hatte ich nur woanders einmal so gesehen, wobei mir auch nicht klar war, ob und was das bringt.

Aber so richtig verstehen tue ich das jetzt irgendwie trotzdem nicht.

Also, property="configuration" darf ich nicht im select angeben. Dann führt es zum Fehler, wie ich ihn beschrieben habe - ob mit oder ohne name-Attribut.

Wenn object="{configuration} im form-Element angegeben ist, wird dann eigentlich nicht schon ein 'Objekt' erwartet (ich weise ja keins zu)? Und warum darf ich nicht das property-Attribut, sondern muss das name-Attribut verwenden?