Creating a custom Filter
<?php
declare(strict_types=1);
namespace App\Grid\Filter;
use App\Form\Type\Filter\SuppliersStatisticsFilterType;
use Sylius\Bundle\GridBundle\Doctrine\DataSourceInterface;
use Sylius\Component\Grid\Attribute\AsFilter;
use Sylius\Component\Grid\Filtering\FilterInterface;
#[AsFilter(
formType: SuppliersStatisticsFilterType::class, // (custom) Symfony FormType
template: '@SyliusBootstrapAdminUi/shared/grid/filter/select.html.twig', // or you can use your own Twig template
type: 'suppliers_statistics', // optional - FQCN by default
)]
class SuppliersStatisticsFilter implements FilterInterface
{
public function apply(DataSourceInterface $dataSource, $name, $data, array $options = []): void
{
// Your filtering logic.
// $data['stats'] contains the submitted value!
$queryBuilder = $dataSource->getQueryBuilder();
$queryBuilder
->andWhere('stats = :stats')
->setParameter(':stats', $data['stats'])
;
// You can leverage the ExpressionBuilder to apply driver-agnostic filters to the data source.
// Combined with restrict(), it provides query builder–style functionalities for grid filters.
$dataSource->restrict($dataSource->getExpressionBuilder()->equals('stats', $data['stats']));
}
}Last updated
Was this helpful?