EasyAdminBundle
EasyAdminBundle copied to clipboard
Enable filter by default
How to enable filter by default in Crud Controller?
public function configureFilters(Filters $filters): Filters
{
return $filters
->add("resolved")
;
}
I can use createIndexQueryBuilder
but this condition is impossible to remove in UI
Probably setDefaultFilter
like setDefaultSort
you have already
`<?php namespace App\Controller\Admin;
use Doctrine\ORM\QueryBuilder; use EasyCorp\Bundle\EasyAdminBundle\Collection\FieldCollection; use EasyCorp\Bundle\EasyAdminBundle\Collection\FilterCollection; use EasyCorp\Bundle\EasyAdminBundle\Controller\AbstractCrudController; use EasyCorp\Bundle\EasyAdminBundle\Dto\EntityDto; use EasyCorp\Bundle\EasyAdminBundle\Dto\SearchDto; use EasyCorp\Bundle\EasyAdminBundle\Orm\EntityRepository;
abstract class CustomCrudController extends AbstractCrudController { public function createIndexQueryBuilder(SearchDto $searchDto, EntityDto $entityDto, FieldCollection $fields, FilterCollection $filters): QueryBuilder { $qb = $this->get(EntityRepository::class)->createQueryBuilder($searchDto, $entityDto, $fields, $filters); $qb->andWhere('entity.user = :user'); $qb->setParameter('user', $this->getUser()); return $qb; } }`
You are welcome :)
I wrote about it, it's not solution
No, this we already use extensively. Problem is you cannot unset the filter that way
You always can modify the admin link to add the filter on it.
So when you click on the link from the menu, the filter is applied directly, no ?
You can create another Crud class that extend your not filtered CRUD class and modify the queryBuilder to have a filtered listing and link in a submenu of the parent CRUD for exemple.
You have many possibilities.
I do ik like this in the DashboardController:
yield MenuItem::linkToCrud('Policies', 'fa fa-paperclip', InsurancePolicy::class)
->setQueryParameter('filters[status][comparison]', '=')
->setQueryParameter('filters[status][value]', 'active')
;
Thanks @parijke I'll check it.
@parijke thank you, this solution is an acceptable workaround :)
But still, I'd suggest a new setDefaultFilters()
property which would be used inside the configureCrud()
method. It could look something like this:
->setDefaultFilters([
'date' => [
'comparison' => BooleanFilter::IS_EQUAL_TO,
'value' => new DateTime('today')
],
])
@parijke thank you, this solution work very nice in my case. My suggestion will be to create new mehtod to set filter
My class looks like this now
public function configureFilters(Filters $filters): Filters
{
return $filters
->add(BooleanFilter::new('isDone'))
->add(DateCalendarFilter::new('Date'));
}
and after It can look like this, of course name of method can be better
public function configureFilters(Filters $filters): Filters
{
return $filters
->add(BooleanFilter::new('isDone')->default('isDone' => true))
->add(DateCalendarFilter::new('Date')->default('Date' => 'today'));
}
I do ik like this in the DashboardController:
yield MenuItem::linkToCrud('Policies', 'fa fa-paperclip', InsurancePolicy::class) ->setQueryParameter('filters[status][comparison]', '=') ->setQueryParameter('filters[status][value]', 'active') ;
Thank you! I'm using this as a fallback.
If anyone (like me) has to check whether a value is null
or not, they need to:
yield MenuItem::linkToCrud('Policies', 'fa fa-paperclip', InsurancePolicy::class) ->setQueryParameter('filters[status][value]', 'null') // ->setQueryParameter('filters[status][value]', 'not_null') ;
Just wanted to leave this here in case anyone needs it.
I do ik like this in the DashboardController:
yield MenuItem::linkToCrud('Policies', 'fa fa-paperclip', InsurancePolicy::class) ->setQueryParameter('filters[status][comparison]', '=') ->setQueryParameter('filters[status][value]', 'active') ;
Hi, i adapted this to filtering date using "is between", but which file to look for knowning all the comparison operation value?
MenuItem::linkToCrud('Policies', 'fa fa-paperclip', InsurancePolicy::class)
->setQueryParameter('filters[date][comparison]', 'between')
->setQueryParameter('filters[date][value]', '2024-01-01')
->setQueryParameter('filters[date][value2]', '2024-02-01'),
For a BooleanFilter use
yield MenuItem::linkToCrud('Clients', 'fa fa-building', Client::class)
->setQueryParameter('filters[status]', 1);