Parliamo del progetto
PHP symfony Sonata

Symfony 4 / Sonata aggiungere un filtro legato a un'entità OneToMany

I filtri sono géré nella méthode configuraFiltriDatagrid protected function configureDatagridFilters(DatagridMapper $datagridMapper) { $filers=$datagridMapper->getAdmin()->getFilterParameters(); } Si può aggiungere un filtro s...

Symfony 4 / Sonata aggiungere un filtro legato a un'entità OneToMany

I filtri sono géré nella méthode configuraFiltriDatagrid

protected function configureDatagridFilters(DatagridMapper $datagridMapper)
	{
$filers=$datagridMapper->getAdmin()->getFilterParameters();
}



Si può aggiungere un filtro semplice su un titolo o n’qualsiasi parametroètre della nostra entitàé.
Il parametroètre show_filter permette di’visualizzare questo al caricamento della pagina. Combiné con il valore di $filters possiamo spécertificare di mantenere l’élément affiché aprèla sottomissione del filtro.

Per esempio, si può dire d’mostrare sempre il filtro:

$datagridMapper
            ->add('title', null, ['show_filter' => true , 'label' => 'Titre'])

O oppure dire di l’mostra solo se ha été utileé

->add('enabled',null,['show_filter' =>!empty($filers['enabled']['value'])?true:null, 'label' => 'Actvé'])

Per una relazione oneToMany, verificheremo se la vostra entitàé è configurato correttamenteé, potete configurare semplicemente come segue :

$datagridMapper->add('field', null, ['show_filter' => true , 'label' => 'nom du champs']);

In sostanza non’Non c'è nulla da fare. Ma potremmo avere bisogno di filtrare i valori. In tal caso, useremo doctrine per modificare la richiestaêtè di séselezione dei valori:

->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"]."%'"));
		                }
            ])

Potremmo anche voler fare una lista costruita dinamicamente da noi stessi:

 ->add('liste', 'doctrine_orm_choice', array(
                'label' => 'ma liste'),
                'choice',
                array(
                    'choices' => array(
                        'label value1' => 'value1',
                        'label value2' => 'value2',
                    ),
                    'expanded' => true,
                    'multiple' => true))

Adattare l’esempio alla versione installata

Gli esempi Symfony e Sonata rimangono legati alle versioni indicate nell’articolo. Symfony 4.x e Symfony 6.2 non sono più supportati: per un progetto attuale, utilizzate un ramo mantenuto e la documentazione corrispondente esattamente alle vostre dipendenze.

php bin/console about
composer show symfony/framework-bundle sonata-project/admin-bundle

Prima di riprendere il codice, controllate le firme, i servizi, le rotte e i template interessati. Aggiungete poi un test funzionale che copra le autorizzazioni, il codice HTTP e il risultato visibile.

Riferimento : versioni di Symfony supportate.

Condividi questo articolo