Zum Inhalt springen

Multiple Parameter für eine Selektierung

Erstellt am 24. Januar 2017 · 2 Antworten · letzte Antwort am 27. Januar 2017

Tags: TYPO3 6.x, Frage

t3georgina ·

Hallo,

ich versuche seit einiger Zeit eine Art Such- / Selektierungsfunktion für meine Extension zu schreiben. Wenn ich nur einen Suchparameter habe, funktioniert das auch super. Aber wenn ich mehr Parameter (Suchfelder) nutzen möchte, bekomme ich immer nur eine T3-Fehlermeldung

The argument type for parameter $firstname of method ....\...\Controller\DatamanagementController->findByResultAction() could not be detected.

Controller Konfig.

/**
  * action findByResult 
  * @param string $firstname
  * @param string $lastname
  * @param string $city
  * @return void
*/

public function findByResultAction($firstname, $lastname, $city) {
		
  $firstname = $this->request->getArgument('firstname');
  $lastname = $this->request->getArgument('lastname');
  $city = $this->request->getArgument('city');
		
  $findResult = $this->datamanagementRepository->findByCondition($firstname, $lastname, $city);
		$this->view->assign('datamanagement', $datamanagement);
			
	}

Repository Konfig. ...

public function findByCondition($firstname, $lastname, $city) {
  $query = $this->createQuery();
				
  $query->matching( 
      $query->logicalAnd( 
          $query->like('firstname', '%'. $firstname . '%'),
          $query->like('lastname', '%'. $lastname . '%'),
          $query->like('city', '%'. $city . '%'.)	
       )		
  );
		
  $query->setOrderings(array('name' => \TYPO3\CMS\Extbase\Persistence\QueryInterface::ORDER_ASCENDING));
  return $query->execute();

}

Hier noch das Formular dazu ...

<f:form action="findByResultForm" additionalAttributes="{role:'form'}">
 <div class="form-inline search-view">
   <div class="form-group">
     Vorname: <f:form.textfield name="firstname" value="{firstname}" class="form-control" placeholder="Vorname eingeben" />
     Nachname: <f:form.textfield name="lastname" value="{lastname}" class="form-control" placeholder="Nachname eingeben" />
     Stadt: <f:form.textfield name="city" value="{city}" class="form-control" placeholder="Stadt eingeben" />
     <f:form.submit value="Suchen!" class="btn-xs btn-primary" />
 </div>
</div>
</f:form>

Was mache ich denn nur falsch? Kann mir hier jemand einen Tipp geben?

Herzlichen Dank und beste Grüße

toifel · · Beste Antwort

Schmeiss die Parameter mal aus deiner Funktionsdeklaration raus, dann sollte es klappen. Wenn du ein Formular absendest, dann hast du im Controller nur über $this->request Zugriff auf die Formularwerte. Es werden aber keine Formular-Felder direkt an die Action übergeben, deshalb sind $firstname usw. immer leer.

Das hier sollte im Controller ausreichen:

/**
  * action findByResult 
  * @return void
*/
 
public function findByResultAction() {
  ...
}