Les filtres sont géré dans la méthode configureDatagridFilters
protected function configureDatagridFilters(DatagridMapper $datagridMapper)
{
$filers=$datagridMapper->getAdmin()->getFilterParameters();
}
On peu rajouter un filtre simple sur un titre ou n’importe quel paramètre de notre entité.
Le paramètre show_filter permet d’afficher celui-ci au chargement de la page. Combiné avec la valeur de $filters on peut spécifier de garder l’élément affiché après soumission du filtre.
Par axample , on peut dire d’afficher en permanence le filtre :
$datagridMapper
->add('title', null, ['show_filter' => true , 'label' => 'Titre'])
Ou alors dire de l’afficher uniquement si il a été utilisé
->add('enabled',null,['show_filter' =>!empty($filers['enabled']['value'])?true:null, 'label' => 'Actvé'])
Pour une liaison oneToMany, nous allons si votre entité est correctement configuré, vous pouvez configurer simplement comme suit :
$datagridMapper->add('field', null, ['show_filter' => true , 'label' => 'nom du champs']);
En gros il n’y a rien a faire. Mais on pourrais avoir besoin de filtrer les valeurs. Dans ce cas, on utilisera doctrine pour modifier la requête de sélection des valeurs :
->add('slug', 'doctrine_orm_callback', ['show_filter' =>!empty($filers['slug']['value'])?true:null, 'label' => 'SEO Slug',
'callback' => function($queryBuilder, $alias, $field, $value)
{
$queryBuilder->andWhere($queryBuilder->expr()->like('o.slug', "'%".$value["value"]."%'"));
}
])
On pourrais aussi vouloir faire une liste construit dynamiquement par nos soins :
->add('liste', 'doctrine_orm_choice', array(
'label' => 'ma liste'),
'choice',
array(
'choices' => array(
'label value1' => 'value1',
'label value2' => 'value2',
),
'expanded' => true,
'multiple' => true))