Hallo,
ich mache gerade meine ersten Gehversuche mit Extbase/Fluid und versuche einen kleinen Produktkatalog umzusetzen.
Dabei gibt es Offers (die ein Aggregat darstellen) und Types, wobei jede Offer zu einem Type gehört.
Ich habe mein Frontendplugin nun in soweit erweitert, als dass man mittels Flexforms im Backend einen Type wählen kann, der dann als Filter für die Ausgabe dienen soll. Zu diesem Zweck habe ich im OffersController eine listFilteredAction hinzugefügt, die als optionalen Parameter den Type nimmt. Ist kein Type gesetzt wird die Auswahl aus dem Backend-Flexform gesetzt.
Nun habe ich folgendes Problem: Wird im Backend ein Type vorausgewählt so übergebe ich eine Variable vom Typ String an die entspr. Funktion im Repository, anstatt korrekterweise das Modelobjekt zu übergeben. Nun meine Frage: kann ich irgendwie im Controller das entsprechende Model zur aus der Flexform übermittelten ID erhalten, um diese zum filtern dann an das Repo weiterzugeben?
Hier noch ein wenig Code (es gibt eigentlich 3 Typen, aber ich denke für meine Fragestellung ist die Anzahl eher irrelevant):
// OfferController.php
/**
* action to show a filtered list
*
* @param Tx_MmdevFos_Domain_Model_Type $maintype
* @param Tx_MmdevFos_Domain_Model_Type $subtype
* @param Tx_MmdevFos_Domain_Model_Type $category
* @return void
*/
public function filteredListAction( Tx_MmdevFos_Domain_Model_Type $maintype = NULL,
Tx_MmdevFos_Domain_Model_Type $subtype = NULL,
Tx_MmdevFos_Domain_Model_Type $category = NULL) {
// check if args where null - if yes try to fetch from backendconf
if ($maintype == NULL && $subtype == NULL && $category == NULL) {
$maintype = $this->settings['maintype'];
$subtype = $this->settings['subtype'];
$category = 1;
}
$filteredOffers = $this->offerRepository->findFiltered($maintype, $subtype, $category);
$this->view-assign('offers', $filteredOffers);
}
// OfferRepository.php
/**
* @param Tx_MmdevFos_Domain_Model_Type $maintype
* @param Tx_MmdevFos_Domain_Model_Type $subtype
* @param Tx_MmdevFos_Domain_Model_Type $category
* @return Maybe an array of objects
*/
public function findFiltered(Tx_MmdevFos_Domain_Model_Type $maintype,
Tx_MmdevFos_Domain_Model_Type $subtype,
Tx_MmdevFos_Domain_Model_Type $category) {
$query = $this->createQuery();
return $query->matching(
$query->logicalAnd(
$query->equals('maintype', $maintype),
$query->equals('subtype', $subtype),
$query->equals('category', $category)
))->execute();
}
Vielen Dank!