add doublemetaphone function and config to enable-disable usage of double metaphone

This commit is contained in:
Julien Fastré 2013-12-01 22:53:37 +01:00
parent 82f1aeee19
commit 44d8236f21
3 changed files with 32 additions and 6 deletions

View File

@ -101,14 +101,25 @@ class PersonController extends Controller {
$offset = $this->getRequest()->query->getInt('offet', 0);
$limit = $this->getRequest()->query->getInt('limit', 30);
$persons = $em->createQuery('SELECT p FROM CLChillPersonBundle:Person p'
. ' WHERE LOWER(p.name) like LOWER(:q) OR LOWER(p.surname) '
. ' like LOWER(:q) ')
->setParameter('q', '%'.$q.'%')
$dql = 'SELECT p FROM CLChillPersonBundle:Person p'
. ' WHERE'
. ' LOWER(p.name) like LOWER(:q)'
. ' OR LOWER(p.surname) like LOWER(:q)';
if ($this->container->getParameter('cl_chill_person.search.use_double_metaphone')) {
$dql .= ' OR DOUBLEMETAPHONE(p.name) = DOUBLEMETAPHONE(:qabsolute)';
}
$query = $em->createQuery($dql)
->setParameter('q', '%'.$q.'%');
if ($this->container->getParameter('cl_chill_person.search.use_double_metaphone')) {
$query->setParameter('qabsolute', $q);
}
// ->setOffset($offset)
// ->setLimit($limit)
->getResult()
;
$persons = $query->getResult() ;
if (count($persons) === 0 ){

View File

@ -21,6 +21,9 @@ class CLChillPersonExtension extends Extension
{
$configuration = new Configuration();
$config = $this->processConfiguration($configuration, $configs);
$container->setParameter('cl_chill_person.search.use_double_metaphone',
$config['search']['use_double_metaphone']);
$loader = new Loader\YamlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config'));
$loader->load('services.yml');

View File

@ -19,6 +19,18 @@ class Configuration implements ConfigurationInterface
{
$treeBuilder = new TreeBuilder();
$rootNode = $treeBuilder->root('cl_chill_person');
$rootNode
->canBeDisabled()
->children()
->arrayNode('search')
->canBeDisabled()
->children()
->booleanNode('use_double_metaphone')
->defaultFalse()
->end()
->booleanNode('use_trigrams')->defaultFalse()->end();
// Here you should define the parameters that are allowed to
// configure your bundle. See the documentation linked above for