### Controller ### public function listAction($search = NULL) { if ($search === NULL) { /** @var ...\Domain\Model\Search $search */ $search = $this->objectManager->get('...\\Domain\\Model\\Search'); $this->getCategorySearchFilterFromFlexForm($search); // this sets some preconfigured values from a flexform } $records = $this->recordRepository->findBySearchParameters($search); $this->view->assign('search', $search); $this->view->assign('records', $records); } ### Repository ### /** * @param Search $search * * @return array|\TYPO3\CMS\Extbase\Persistence\QueryResultInterface */ public function findBySearchParameters(Search $search) { /** @var $query \TYPO3\CMS\Extbase\Persistence\QueryInterface */ $query = $this->createQuery(); $query->setOrderings(array('sorting' => QueryInterface::ORDER_DESCENDING)); $properties = array(); if ($search->getCategories()) { $this->getCategoryProperties($search->getCategories(), $query, $properties); } if ($search->getPremiumFilter() === TRUE || $search->getPremiumFilter() === FALSE) { $properties[] = $query->equals('premium', $search->getPremiumFilter()); } // in case premium only is set, don't care about other filters if ($search->getPremiumFilter() === TRUE) { if (count($properties) == 0) { return $this->findAll(); } elseif (count($properties) == 1) { $query->matching( $properties[0] ); } else { $query->matching( $query->logicalAnd( $properties ) ); } $result = $query->execute(); return $result; } // get the searchWord properties if (strlen($search->getSearchword()) > 0) { $this->getSearchWordProperties($search->getSearchword(), $query, $properties, $search->getModel()); } if ($search->getLocationRange() > 0) { $properties[] = $query->equals('locationRange', $search->getLocationRange()); } if ($search->getPriceRange() > 0) { $properties[] = $query->equals('priceRange', $search->getPriceRange()); } if ($search->getClassification() > 0) { $properties[] = $query->equals('classification', $search->getClassification()); } if (count($properties) == 0) { return $this->findAll(); } elseif (count($properties) == 1) { $query->matching( $properties[0] ); } else { $query->matching( $query->logicalAnd( $properties ) ); } $result = $query->execute(); return $result; } ### View ### Search form to filter the record list: {f:if(condition:search_show, then: '', else: 'style="display:none;"')} >




{f:translate(key:'search.reset')}
List of records: