- PVSM.RU - https://www.pvsm.ru -
Всем любителям Symfony известно что в ней нету компонента фильтр.
Есть замечательные и удобные Constraints [1] и даже была попытка создать на подобии их фильтры issue на Github [2], но никто так и не взялся это сделать.
Когда я в очередной раз столкнулся с задачей фильтрации большого количества данных, полученных от пользователя, я понял что пора решить задачу фильтрации как то более глобально/красиво/удобно.
Проведя некий research я понял что ничего кардинально нового в фильтрировании на php не появилось. Есть 2 популярных компонента:
Прошу заметить что последний не совсем хорошо поддерживается автором [5].
Для DMS-Filter есть symfony bundle [6] но он не совместим с Symfony 3. Да и код его не понравился, так как я понимал что можно сделать все немного проще.
Проанализировав ситуацию, я понял что самый быстрый и надежный способ написать bundle для фильтрации который будет использовать хорошо документированные и покрытие тестами фильтры из Zend Filter. Так же хочу добавить что в прошлом я много работал с Zend Framework 1 и мне они были близки и понятны.
Мне хотелось сделать логику работы фильтров на подобии Symfony Constraints.
В итоге был написан bundle, что добавляет сервис который может быть использован для фильтрации объекта на основе аннотаций. Кроме того, bundle может фильтровать формы, если он находит аннотированный объект.
В процессе написания модуля сложностей не возникло. Вот разделы документации которые я использовал во время написания:
Мне кажется не стоит подробно описывать как пользоваться bundle в данной публикации так как она больше обьясняет зачем я его написал. Да и странно просто копировать информацию с одного места в другое.
Документацию по использованию bundla и сам bundle вы можете найти на GitHub FilterBundle [11].
Хотел бы узнать у сообщества, а как вы решаете задачи по фильтрации в Symfony?
Автор: Bukashk0zzz
Источник [12]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/php-2/118417
Ссылки в тексте:
[1] Constraints: http://symfony.com/doc/current/reference/constraints.html
[2] issue на Github: https://github.com/symfony/symfony/issues/3973
[3] Zend Filter: http://framework.zend.com/manual/current/en/modules/zend.filter.html#introduction-to-zend-filter
[4] DMS-Filter: https://github.com/rdohms/dms-filter
[5] не совсем хорошо поддерживается автором: https://github.com/rdohms/dms-filter/pulse/monthly
[6] symfony bundle: https://github.com/rdohms/dms-filter-bundle
[7] How to Create a Form Type Extension: http://symfony.com/doc/current/cookbook/form/create_form_type_extension.html
[8] Form Events: http://symfony.com/doc/current/components/form/form_events.html
[9] How to Dynamically Modify Forms Using Form Events: http://symfony.com/doc/current/cookbook/form/dynamic_form_modification.html
[10] How to Register Event Listeners and Subscribers: http://symfony.com/doc/current/cookbook/doctrine/event_listeners_subscribers.html
[11] FilterBundle: https://github.com/Bukashk0zzz/FilterBundle
[12] Источник: https://habrahabr.ru/post/281863/
Нажмите здесь для печати.