chub / search-bundle
Site search bundle for Symfony2
Installs: 145
Dependents: 0
Suggesters: 0
Security: 0
Stars: 6
Watchers: 4
Forks: 4
Open Issues: 0
Type:symfony-bundle
Requires
- php: >=5.5
- doctrine/common: ~2.0
- symfony/framework-bundle: 2.*
- symfony/yaml: 2.*
This package is not auto-updated.
Last update: 2024-11-01 21:17:25 UTC
README
Search Symfony2 bundle. Provides easy global search service for your site.
Installation
Download bundle
First of all, download bundle using one of common ways:
Using deps file
Add the following lines to your deps
file and run php bin/vendors install
[SearchBundle]
git=https://github.com/ChubV/SearchBundle.git
target=bundles/ChubProduction/SearchBundle
Using composer
Register the namespaces
Add the following namespace entry to the registerNamespaces
call
in your autoloader:
<?php // app/autoload.php $loader->registerNamespaces(array( // ... 'ChubProduction\SearchBundle' => __DIR__.'/../vendor/bundles', // ... ));
This is unnecessary step if you use Composer's automaticaly generated autoload file
Register the bundle
To start using the bundle, register it in your Kernel:
<?php // app/AppKernel.php public function registerBundles() { $bundles = array( // ... new ChubProduction\SearchBundle\SearchBundle(), ); // ... }
Use your Search
Create your search provider, that must implement SearchProviderInterface
<?php // NewsSearchProvider.php class NewsSearchProvider implements SearchProviderInterface { private $m; /** * @param string $str * * @return \Doctrine\Common\Collections\ArrayCollection */ public function search($str) { // Perform search and return ArrayCollection of objects that implements SearchResultInterface // There is also default SearchResult class for this ChubProduction\SearchBundle\Service\SearchResult } /** * Return provider name * * @return string */ public function getName() { return 'news'; } /** * Return provider title * * @return string */ public function getTitle() { return 'News, events, etc '; }
Register search provider among other ones
# services.yml news.search.provider: class: ChubProduction\NewsBundle\Search\NewsSearchProvider tags: - { name: search.provider } content.search.provider: class: ... tags: - { name: search.provider } ....
Use the search getting an ArrayCollection of ResultSets with the results from your search providers
<?php ... /** * @return array|\Symfony\Component\HttpFoundation\RedirectResponse * @Route("/search/{_locale}", name="search") * @Template() */ public function searchAction($_locale) { $r = $this->getRequest(); if ($r->query->has('q')) { $res = $this->get('search')->search($r->query->get('q')); // Here is our service return compact('res'); } return $this->redirect($this->generateUrl('main_page', compact('_locale'))); }