/** * Executes search. * * @param SearchRequest $request * * @return SearchResponse */ public function search(SearchRequest $request) { $search = $this->container->buildSearch($request); /** @var FilterInterface[] $filters */ foreach ($this->container->all() as $name => $filter) { // We simply exclude not related filters and current filter itself. $relatedFilters = $this->container->getFiltersByRelation(new AndRelation([$filter->getSearchRelation(), new ExcludeRelation([$name])])); $filter->preProcessSearch($search, $this->container->buildSearch($request, $relatedFilters), $request->get($name)); } $result = $this->repository->execute($search); return new SearchResponse($this->getFiltersViewData($result, $request), $result, $this->composeUrlParameters($request)); }
/** * Tests getFiltersByRelation method. */ public function testGetFiltersByRelation() { $filtersContainer = new FiltersContainer(); $result = $filtersContainer->getFiltersByRelation($this->getMock('ONGR\\FilterManagerBundle\\Relations\\RelationInterface')); $this->assertInstanceOf('ONGR\\FilterManagerBundle\\Relations\\FilterIterator', $result); }