hallo,
habe mir ein suchformular mit mehreren input feldern gebastelt. es geht darum, dass man in einem terminkalender nach dem namen, dem ort und dann auch noch datum suchen kann. die ausgabe des formulares sieht so aus und funktioniert auch (datum habe ich mal da weg gelassen):
<f:form class="filterForm" method="post" action="list" name="demand" object="{demand}">
<f:form.textfield property="name" />
<f:form.select property="ort" options="{terminKalenders}" optionValueField="ort" optionLabelField="ort" prependOptionLabel="bitte wählen" />
<f:form.submit id="findtermin" value="Termin finden"/>
<div class="clr"></div>
</f:form>
nun habe ich im TerminKalenderController.php die listAction wie folgt erweitert:
public function listAction(\Terminkalender\Mwterminkalender\Domain\Model\Demand $demand = NULL, \Terminkalender\Mwterminkalender\Domain\Model\Name $name = NULL) {
/* load filter contents */
$this->view->assign('demand', $demand);
/* create hotel list */
if($demand !== NULL) {
$terminKalenders = $this->terminKalenderRepository->findDemanded($demand);
}
else {
$terminKalenders = $this->terminKalenderRepository->findAll();
}
$this->view->assign('terminKalenders', $terminKalenders);
}
und dann habe ich im ordner model ein Demand.php angelegt:
<?php
namespace Terminkalender\Mwterminkalender\Domain\Model;
class Demand extends \TYPO3\CMS\Extbase\DomainObject\AbstractEntity {
/**
* name
*
* @var string
* @validate NotEmpty
*/
protected $name = '';
/**
* ort
*
* @var string
* @validate NotEmpty
*/
protected $ort = '';
/**
* Returns the name
*
* @return string $name
*/
public function getName() {
return $this->name;
}
/**
* Sets the name
*
* @param string $name
* @return void
*/
public function setName($name) {
$this->name = $name;
}
/**
* Returns the ort
*
* @return string $ort
*/
public function getOrt() {
return $this->ort;
}
/**
* Sets the ort
*
* @param string $ort
* @return void
*/
public function setOrt($ort) {
$this->ort = $ort;
}
} // end of class
und dann im repository TerminKalenderRepository.php folgendes rein gegeben:
namespace Terminkalender\Mwterminkalender\Domain\Repository;
/**
* The repository for TerminKalenders
*/
class TerminKalenderRepository extends \TYPO3\CMS\Extbase\Persistence\Repository {
public function findDemanded(\Terminkalender\Mwterminkalender\Domain\Model\Demand $demand = NULL) {
$query = $this->createQuery();
$constraints = array(); //to collect all filter constraints
if ($demand !== NULL) {
//name
if ($name->getName() !== NULL) {
$namens = $name->getName();
}
$constraints[] = $query->like('name', '%' . $namens . '%');
//ort
if ($demand->getOrt() !== NULL) {
$orts = $demand->getOrt();
}
$constraints[] = $query->like('ort', '%' . $orts . '%');
if(sizeof($constraints) > 0) {
$query->matching($query->logicalAnd($constraints));
$terminKalenders = $query->execute();
return $terminKalenders;
}
}
return $this->findAll();
}// end findDemanded
}
mein problem ist, dass ich, sobald ich beide felder (name und ort) abfrage, ein fehler kommt. sobald ich aber nur 1 (name oder ort als formularefeld und auch im demand.php und repository) abfrage, funktioniert das ganze perfekt und mir wird die liste der terminen entsprechend der suchabfrage ausgegeben.
weiß jemand, wo da der fehler liegt, bzw. was ich bei abfragen von mehreren feldern beachten muss? danke schon für eure hilfe!
lg
npre