Zum Inhalt springen

[Fluid] Suchformular - Variable im Controller benutzen

Erstellt am 20. Oktober 2010 · 1 Antwort · letzte Antwort am 21. Oktober 2010

Tags: Frage

reginaldo ·

Hallo allerseits,

ich setze mich jetzt schon seit einigen Wochen mit Extbase/Fluid auseinander. Ich habe vorher noch nie eine Extension erstellt und bin auf dem Gebiet noch ziemlich grün hinter den Ohren. Soweit ist auch alles klar und ich komme gut zurecht. Aber eine (für viele vielleicht banale) Sache verstehe ich nicht:

Ich habe auf der index View meines Controlers ein sehr simples Formular eingebaut. Es besteht aus einer Textbox und das wars. In die Textbox soll eine Ordernummer (bookingnumber) eingegeben werden und beim abschicken soll die showAction die Order (booking) mit der entsprechenden Nummer anzeigen.

Ich habe jetzt schon einige Tage lang Foren durchsucht und versucht mir das irgendwie verständlich zu machen. Aber ich brauche Hilfe :o

Das Formular in der index.html sieht so aus:

<f:form method="post" action="show">
Bookingnumber: <f:form.textbox name="bookingnumber" />
<f:form.submit value="Search" />
</f:form>

Und der entsprechende Teil des Controllers so:

/**
* Action that displays a single Booking
* 
* @param Tx_RaFreighttracking_Domain_Model_Booking $booking The booking to display 
* 
*/
 public function showAction() {
   $booking = $this->bookingRepository->findOneByBookingnumber($bookingnumber);		
   $bookingnumber = $this->request->getArgument('bookingnumber');
		$this->view->assign('booking', $booking);
	}

Wenn ich statt:

findOneByBookingnumber($bookingnumber);

das hier schreibe:

findOneByBookingnumber('SA002');

dann wird die Order mit der Nummer SA002 angezeigt. Aber ich verstehe nicht, wie ich jetzt 'SA002' mit einer Variablen austauschen kann.

Bitte, bitte helft mir. Ich hab schon Kopfschmerzen deswegen #angry#

Viele Grüße aus Schanghai,
reginaldo

reginaldo ·

Ich hab´s:

Das Problem lag eigentlich auf der Hand:

Im Controller habe ich den request nach findOneByBooking() eingetragen. :o Natürlich muss die request vorher geschehen. So funktioniert es:

	/**
	 * Action that displays a single Booking
	 * 
	 * @param Tx_RaFreighttracking_Domain_Model_Booking $booking The booking to display 
	 * 
	 */
	public function showAction() {
		$bookingnumber = $this->request->getArgument('bookingnumber');
		$booking = $this->bookingRepository->findOneByBookingnumber($bookingnumber);		
		$this->view->assign('booking', $booking);
	}

Dann noch in der ext_localconf.php für die indexAction und die showAction das caching deaktivieren und alles läuft prima:

Tx_Extbase_Utility_Extension::configurePlugin(
	$_EXTKEY,
	'Pi1',
	array(
		'Booking' => 'index, show, new, create, edit, update, delete','Bookingdetails' => 'index, show, new, create, edit, update, delete','Trackinginfo' => 'index, show, new, create, edit, update, delete','Comment' => 'index, show, new, create, edit, update, delete',
	),
//das Array zum deaktivieren des caching:
	array(
		'Booking' => 'index, show, create, update, delete','Bookingdetails' => 'index, show, create, update, delete','Trackinginfo' => 'index, show, create, update, delete','Comment' => 'index, show, create, update, delete',
	)
);

Gruß,
reginaldo