4. Filter field definition¶
4.1. Available filter types¶
- sonata_search_elastica_boolean: depends on the
sonata_type_filter_default
Form Type, renders yes or no field, - sonata_search_elastica_callback: depends on the
sonata_type_filter_default
Form Type, - sonata_search_elastica_choice: depends on the
sonata_type_filter_default
Form Type, - sonata_search_elastica_string: depends on the
sonata_type_filter_choice
Form Type, - sonata_search_elastica_number: depends on the
sonata_type_filter_number
Form Type, - sonata_search_elastica_date : depends on the
sonata_type_filter_date
From Type, renders a date field, - sonata_search_elastica_date_range : depends on the
sonata_type_filter_date_range
From Type, renders a 2 date fields, - sonata_search_elastica_datetime : depends on the
sonata_type_filter_datetime
From Type, renders a datetime field, - sonata_search_elastica_datetime_range : depends on the
sonata_type_filter_datetime_range
From Type, renders a 2 datetime fields.
4.1.1. Callback¶
To create a custom callback filter, you just need to set the “callback” filter option
to a valid callback function. First argument of this function will be
Sonata\AdminSearchBundle\ProxyQuery\ElasticaProxyQuery
instance which could be
modified according to your needs:
namespace Sonata\NewsBundle\Admin;
Sonata\AdminBundle\Admin\AbstractAdmin;
use Sonata\AdminBundle\Datagrid\DatagridMapper;
use Sonata\AdminSearchBundle\ProxyQuery\ElasticaProxyQuery;
final class PostAdmin extends AbstractAdmin
{
protected function configureDatagridFilters(DatagridMapper $datagridMapper)
{
$datagridMapper
->add('title')
->add('name', Sonata\AdminSearchBundle\Filter\CallbackFilter::class, [
'callback' => function (ElasticaProxyQuery $query, $alias, $field, $data) {
if (!$data || !is_array($data) || !array_key_exists('value', $data)) {
return;
}
$queryBuilder = new \Elastica\Query\Builder();
$queryBuilder
->fieldOpen('multi_match')
->field('query', trim($data['value']))
->field('fields', ['name', 'name.std'])
->field('operator', 'and')
->fieldClose();
$query->addMust($queryBuilder);
}
])
;
}
}
4.1.2. Date¶
To make query on date/datetime type, you can use one of the sonata_search_elastica_date filter types. For example if you have a date in the ISO 8601 date format:
protected function configureDatagridFilters(DatagridMapper $datagridMapper)
{
$datagridMapper
->add('date', Sonata\AdminSearchBundle\Filter\DateTimeFilter::class, null, 'datetime', [
'format' => 'c',
])
;
}
The format must be a string formatted according to the php format date and be the one used
to map the data in elasticsearch. If it is not the same, ElasticSearch will raise an exception
failed to parse date field [15/05/28] Invalid format
.