Recipe: Filters
Add a declarative filter popover to a Doctrine server-side table
What / When
Add configureFilters() when users need structured filters (text, choice, date range, number range, association) on a
server-side Doctrine table.
Minimal Example
use Doctrine\ORM\QueryBuilder;
use Pentiminax\UX\DataTables\Filter\ChoiceFilter;
use Pentiminax\UX\DataTables\Filter\TextFilter;
use Pentiminax\UX\DataTables\Model\Filters;
public function configureFilters(Filters $filters): Filters
{
return $filters
->add(TextFilter::new('email')->label('Email'))
->add(
ChoiceFilter::new('status')
->label('Status')
->options([
'Draft' => 'draft',
'Published' => 'published',
])
);
}
Price range and category
use App\Entity\Category;
use Doctrine\ORM\QueryBuilder;
use Pentiminax\UX\DataTables\Filter\EntityFilter;
use Pentiminax\UX\DataTables\Filter\NumberRangeFilter;
public function configureFilters(Filters $filters): Filters
{
return $filters
->add(NumberRangeFilter::new('price')->label('Price'))
->add(
EntityFilter::new('category')
->label('Category')
->entity(Category::class)
->optionLabel('name')
->optionsQuery(static function (QueryBuilder $qb): void {
$qb->andWhere('e.archived = false');
})
->multiple()
);
}
Leave a bound empty to filter on one side only. The category list is loaded when the table renders
and fails above 200 entries: narrow it with optionsQuery() or raise limit().