chub/search-bundle

There is no license information available for the latest version (dev-master) of this package.

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

dev-master 2016-01-11 07:09 UTC

This package is not auto-updated.

Last update: 2024-05-03 19:01:14 UTC


README

Search Symfony2 bundle. Provides easy global search service for your site.

Build Status

knp

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')));
	}