/** * Will be executed when the search.search-event is triggered * * @param SearchEvent $event */ public function onSearch(SearchEvent $event) { $ids = $event->getFoundIdsForClass('SumoCoders\\FrameworkUserBundle\\Entity\\User'); /** @var \Symfony\Bundle\FrameworkBundle\Routing\Router $router */ $router = $this->container->get('router'); /** @var $userManager \SumoCoders\FrameworkUserBundle\Model\FrameworkUserManager */ $userManager = $this->container->get('fos_user.user_manager'); $users = $userManager->findActiveByIds($ids); if (!empty($users)) { foreach ($users as $user) { /** @var $user \SumoCoders\FrameworkUserBundle\Entity\User */ $result = new SearchResult('SumoCoders\\FrameworkUserBundle\\Entity\\User', $user->getId(), 'users', $user->getUsername(), $router->generate('sumocoders_frameworkuser_user_edit', array('id' => $user->getId()))); $event->addResult($result); } } }
/** * Executes the real search */ public function search() { // grab the ids and their number of occurence from the search index $idsAndWeightsPerClass = (array) $this->repository->search($this->term); // process the results, and sort them by weight/class $foundItems = array(); foreach ($idsAndWeightsPerClass as $class => &$row) { arsort($row); $foundItems[$class] = array_keys($row); } // create the event, and add our findings $event = new SearchEvent(); $event->setFoundItems($foundItems); $this->eventDispatcher->dispatch('framework_search.search', $event); // sort the results based on their weights $results = $event->getResults(); return $this->sortResults($idsAndWeightsPerClass, $results); }