Hallo TYPO3-Freunde,
im Rahmen eines Studienprojektes soll von mir eine Extension entwickelt werden. Dabei werden im Backend in einem SysOrdner Wohnungen angelegt, die im Frontend ausgegeben werden. Entwickelt wird mit Extbase/Fluid und mit Hilfe des Buches "Zukunftssichere TYPO3-Extensions mit Extbase & Fluid".
Das einfache Anlegen im Backend funktioniert schon sehr gut und auch kann ich mir alle Angebote im Frontend anzeigen lassen.
Nun möchte ich allerdings die Angebote filtern lassen, nach Anzahl Zimmer, Fläche, Preis und später Koordinaten. Dafür wurde wie im Buch ein Filter-Model mit eben jenen Eigenschaften erzeugt. Als Beispiel für die Anzahl der Zimmer:
Dem Controller wird vom Formular das Filterobjekt übergeben. Die gesamte Action sieht so aus:PHP-Code:protected $rooms;
public function setRooms($rooms) {
$this->rooms = $rooms;
}
public function getRooms() {
return $this->rooms;
}
Im Repository soll dann die Abfrage geschehen:PHP-Code:public function listAction(Tx_Mowopo_Domain_Model_Filter $filter = NULL) {
$this->view->assign('filter', $filter);
$this->view->assign('flats', $this->flatRepository->findFiltered($filter));
}
Und nun endlich zu meinem Problem. Gebe ich im Formular zum Beispiel eine 4 ein, also sollten nun alle Wohnungen mit 4 Zimmern ausgeben werden, erhalte ich folgende eigentlich eindeutige Fehlermeldung:PHP-Code:public function findFiltered(Tx_Mowopo_Domain_Model_Filter $filter = NULL) {
$query = $this->createQuery();
$constraints = array();
if ($filter!== NULL){
$filteredRooms = $filter->getRooms();
if (!empty($filteredRooms)) {
$constraints[] = $query->logicalOr(
$query->equals('rooms', NULL),
$query->equals('rooms', $filteredRooms)
);
}
$filteredSqrmeter = $filter->getSqrmeter();
if (!empty($filteredSqrmeter)) {
$constraints[] = $query->logicalOr(
$query->equals('sqrmeter', NULL),
$query->equals('sqrmeter', $filteredSqrmeter)
);
}
$filteredPrice = $filter->getPrice();
if (!empty($filteredPrice)) {
$constraints[] = $query->logicalOr(
$query->equals('price', NULL),
$query->equals('price', $filteredPrice)
);
}
$filteredLat = $filter->getLat();
if (!empty($filteredLat)) {
$constraints[] = $query->logicalOr(
$query->equals('lat', NULL),
$query->equals('lat', $filteredLat)
);
}
$filteredLng = $filter->getLng();
if (!empty($filteredLng)) {
$constraints[] = $query->logicalOr(
$query->equals('lng', NULL),
$query->equals('lng', $filteredLng)
);
}
$query->matching($query->logicalAnd($constrains));
return $query->execute();
}
else {
return $this->createQuery()->execute();
}
}
Oops, an error occured!
transformToObject() accepts only numeric values and arrays.
Für mich bedeutet das, dass die 4 nicht als Zahl sondern als String erkannt wird und deshalb die Anfrage einen Fehler erzeugt. Allerdings ist mir momentan nicht klar, wo ich die 4 Umwandeln könnte. Ich hoffe es hat vielleicht jemand einen Tipp für mich. Vielen Dank
Geändert von Jonny252 (27.02.2011 um 17:50 Uhr)
Hat sich erledigt. Es war eine ungünstige Anhäufung von Fehlern im Repository.
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
Lesezeichen