Всім любителям Symfony відомо що в ній немає компонента фільтр.
Є чудові і зручні Constraints і навіть була спроба створити на подобі їх фільтри issue на Github, але ніхто так і не взявся це зробити.
Когда я в очередной раз столкнулся с задачей фильтрации большого количества данных, полученных от пользователя, я понял что пора решить задачу фильтрации как то более глобально/красиво/удобно.
Провівши якийсь research я зрозумів що нічого кардинально нового у фільтруванні на php не з'явилося. Є 2 популярні компоненти:
- Zend Filter
- DMS-Filter
Прошу зауважити що останній не зовсім добре підтримується автором.
Для DMS-Filter є symfony bundle але він не сумісний з Symfony 3. Та й код його не сподобався, так як я розумів що можна зробити все трохи простіше.
Проаналізувавши ситуацію, я зрозумів що найшвидший і надійний спосіб написати bundle для фільтрації який буде використовувати добре документовані і покриття тестами фільтри з Zend Filter. Так само хочу додати що в минулому я багато працював з Zend Framework 1 і мені вони були близькі і зрозумілі.
Мені хотілося зробити логіку роботи фільтрів на подобі Symfony Constraints.
У підсумку було написано bundle, що додає сервіс, який можна використовувати для фільтрації об'єкта на основі анотацій. Крім того, bundle може фільтрувати форми, якщо він знаходить анотований об'єкт.
У процесі написання додатка складнощів не виникло. Ось розділи документації, які я використовував під час написання:
- How to Create a Form Type Extension
- Form Events
- How to Dynamically Modify Forms Using Form Events
- How to Register Event Listeners and Subscribers
Мені здається не варто детально описувати як користуватися bundle в даній публікації так як вона більше пояснює навіщо я його написав. Та й дивно просто копіювати інформацію з одного місця в інше.
Документацію з використання bundla і сам bundle ви можете знайти на GitHub FilterBundle.
Хотів би дізнатися у спільноти, а як ви вирішуєте завдання щодо фільтрації в Symfony?
