Zum Inhalt springen

Demand-Objekt aus Formular an Controller-Action übergeben ?

Erstellt am 30. Mai 2014 · 2 Antworten · letzte Antwort am 5. Juni 2014

Tags: Fluid, Frage

Unbekannter Benutzer ·

Moin Moin,

ich versuche gerade, eine Suchabfrage über ein Formular zu entwickeln. Dazu habe ich neben meinem Domain Model Shop eine Demand Klasse eingerichtet, die einige getter und setter für die abzufragenden Felder besitzt.

Die Form sieht so aus:

<f:form action="list" controller="Shop" name="demand" object="{demand}">
	  <f:form.textfield name="city" property="city" />
	  <f:form.textfield name="zipcode" property="zipcode" />
	  <f:form.textfield name="address" property="address" />
   <f:form.submit class="submit" value="Submit"/>
</f:form>

Die list-Action:

/**
	 * action list
	 *
	 * @param \Dm\DmShopfinder\Domain\Model\Demand $demand
	 * @return void
	 */
	public function listAction(\Dm\DmShopfinder\Domain\Model\Demand $demand = NULL) {
	
		if($demand == NULL)
		{
			$this->view->assign('demand', $demand );
		}
		else {
			 $shops = $this->shopRepository->findAll();
			 $this->view->assign('shops', $shops);
			 $this->view->assign('demand', $demand );
		}

	}

Das Problem ist nun, dass $demand nach dem Abschicken des Formulars in der list-Action nun IMMER NULL ist. Ich kann also nicht auf das Objekt zugreifen ( da scheinbar auch gar keins übergeben wird ? ).

Wenn ich nun aber folgende Zeilen in der List-Action ergänze:

if ($this->request->hasArgument('demand')) {
     $demandObject = $this->request->getArgument('demand');
}

$this->view->assign('demandObject', $demandObject );

dann kann ich im Fluid-Template im debug alle Werte sehen, die im Formular eingegeben worden sind. Allerdings wird mir dann auch nur ein Array und kein Objekt vom Typ Demand angezeigt.
Ich kann mir auch nicht vorstellen, dass es Sinn und Zweck ist, hier nochmal explizit die übergebenen Parameter abzufragen ?

Weiß jemand von euch, wie ich direkt das Objekt $demand an den Controller übergebe und dort auch auf das OBJEKT $demand zugreifen kann und dort nicht gezwungen werde, ein array zu nutzen ?

Vielen Dank für eure Hilfe.
Gruß

Unbekannter Benutzer ·

Okay, ich habe gerade nochmal eine kleine Änderung vorgenommen:

Das Form-Tag habe ich um method="post" ergänzt ( was das Fluid-Template eigentlich sowieso automatisch ergänzt, wenn nicht angegeben ) und die name-Attribute aus den Form-Fields entfernt. Plötzlich ging es dann, insofern kann das hier zu. Danke trotzdem 😛

Unbekannter Benutzer · · Beste Antwort

Hallo nochmal...
nachdem ich mir gestern die Extension komplett zerschossen habe ( EM und Unwissenheit sei dank 😉 ) musste ich nochmals von vorne anfangen.

Komischerweise stand ich dann wieder vor dem selben Problem: Das Objekt aus dem Formular wird nicht an die Controller List-Action übergeben ( zumindest ergibt ein var_dump und f:debug von {demand} NULL ).

Also kann ich nach wie vor nur über:

if ($this->request->hasArgument('demand')) {
		     $demand = $this->request->getArgument('demand');
		}

auf die Formulareingaben zugreifen. Prinzipiell ist das ja auch okay, aber warum zum Teufel funktioniert die Objekt-Übergabe nur nach Lust und Laune ? Weiß da jemand, wo da noch Fehlerquellen liegen können ?

Bin echt am verzweifeln und hab mal wieder soooo einen Hals auf Typo... 😉

Gruß