MultiSearchBundle
This bundle provides basic service and form type for Multi Search in Doctrine., (*1)
, (*2)
Description
Search in all of entity columns by given search term.
In response returns Doctrine\ORM\QueryBuilder
containing the multiple search criteria.
The searched columns can be specified., (*3)
Installation
Using composer
composer require petkopara/multi-search-bundle
Add it to the AppKernel.php
class:, (*4)
new Petkopara\MultiSearchBundle\PetkoparaMultiSearchBundle(),
Usage
Service
You can directly use the service and to apply the multi search to any doctrine query builder., (*5)
public function indexAction(Request $request)
{
$search = $request->get('search');
$em = $this->getDoctrine()->getManager();
$qb = $em->getRepository('AppBundle:Post')->createQueryBuilder('e');
$qb = $this->get('petkopara_multi_search.builder')->searchEntity($qb, 'AppBundle:Post', $search);
//$qb = $this->get('petkopara_multi_search.builder')->searchEntity($qb, 'AppBundle:Post', $search, array('name', 'content'), 'wildcard');
..
}
Create your form type and include the multiSearchType in the buildForm function:, (*6)
use Petkopara\MultiSearchBundle\Form\Type\MultiSearchType;
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('search', MultiSearchType::class, array(
'class' => 'AppBundle:Post', //required
'search_fields' => array( //optional, if it's empty it will search in the all entity columns
'name',
'content'
),
'search_comparison_type' => 'wildcard' //optional, what type of comparison to applied ('wildcard','starts_with', 'ends_with', 'equals')
))
;
}
In the controller add call to the multi search service:, (*7)
public function indexAction(Request $request)
{
$search = $request->get('search');
$em = $this->getDoctrine()->getManager();
$queryBuilder = $em->getRepository('AppBundle:Post')->createQueryBuilder('e');
$filterForm = $this->createForm('AppBundle\Form\PostFilterType');
// Bind values from the request
$filterForm->handleRequest($request);
if ($filterForm->isValid()) {
// Build the query from the given form object
$queryBuilder = $this->get('petkopara_multi_search.builder')->searchForm($queryBuilder, $filterForm->get('search'));
}
..
}
Render your form in the view, (*8)
{{ form_rest(filterForm) }}
Available Options
The provided type has 2 options:, (*9)
These parameters can be applyed to the service as well as 4th and 5th parameter to searchEntity()
method, (*15)
Author
Petko Petkov - petkopara@gmail.com, (*16)
License
MultiSearchBundle is licensed under the MIT License., (*17)