/** * 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 buildSearch method. */ public function testBuildSearch() { $mockRequest = $this->getMock('ONGR\\FilterManagerBundle\\Search\\SearchRequest'); $mockRequest->expects($this->once())->method('get')->will($this->returnValue(null)); $mockFilterInterface = $this->getMock('ONGR\\FilterManagerBundle\\Filters\\FilterInterface'); $mockFilterInterface->expects($this->once())->method('modifySearch')->withConsecutive($this->isInstanceOf('ONGR\\ElasticsearchBundle\\DSL\\Search'), $this->equalTo('testName'), $this->identicalTo($mockRequest)); $filtersContainer = new FiltersContainer(); $filtersContainer->add([$mockFilterInterface]); $result = $filtersContainer->buildSearch($mockRequest); $this->assertInstanceOf('ONGR\\ElasticsearchBundle\\DSL\\Search', $result); }