Skip to content

Latest commit

 

History

History
43 lines (36 loc) · 1.12 KB

filters.md

File metadata and controls

43 lines (36 loc) · 1.12 KB

Using filters

To make filters you must implement the interface FilterInterface. Because Melodiia validates any input to avoid inconsistent API, filters also uses form types.

If it's not done automatically, you must register your filter as a service:

services:
    App\Filters\Todos\TodoContainsFilter:
        # This tag is autoconfigured in standard installations
        tags: ['melodiia.crud_filter']

Here is how may look this filter:

class TodoContainFilter implements FilterInterface
{
    /**
     * @param QueryBuilder $queryBuilder
     */
    public function filter($queryBuilder, FormInterface $form): void
    {
        $q = $form->get('q')->getData();
        if (!empty($q)) {
            $queryBuilder->andWhere($queryBuilder->expr()->like('item.content', ':like'));
            $queryBuilder->setParameter('like', '%' . $q . '%');
        }
    }

    public function supports(string $class): bool
    {
        return Todo::class === $class;
    }

    public function buildForm(FormBuilderInterface $formBuilder): void
    {
        $formBuilder->add('q', TextType::class);
    }
}