Comments 10
Для 1С-Битрикс: Управление сайтом тоже будет доступно?
А зачем заниматься собственным велосипедом, если можно было взять симфонийский валидатор и адаптировать?
А чем Битрикс хуже чем Yii или Laravel? Тоже хочется велосипед :)
Чем хуже конкретно данный валидатор?
Да дофига чем:
Атрибуты, которые семантически должны представлять из себя классы метадаты отвечают ещё за валидацию. Смешение логики и правил маппингов.
В примерах кода не вижу вообще возможностей вынести правила валидации отдельно от DTO, например в yaml, php, json, etc. Чтобы правила можно было указывать во внешних файлах и изолировать от DTO.
Не вижу зависимых правил и сложных выражений, типа
When X then (Y or Z)
. И даже реализовать подобное невозможно, кажется, учитывая то что в правила валидации приходит значение только одного поля.Способа внедрить в конструктор в валидаторы тоже не вижу, т.к. см. п.1. Ну типа есть, например, сервис, предоставляющий анализ текста на "мат", как его всунуть в валидатор, чтоб сказать:
#[DoesNotContainSwearWords(criteria: 0.2)]
, который уже делегируется нужному валидатору, который содержит инфу и локализации, и нужные коннекты к сервису и прочее.Контекста и прочей инфы тоже нет, т.к. см. п.1
А в виде пакета как это поставить и посмотреть? Ну вот я хочу использовать у себя этот пакет отдельно в проекте, например...
Могу ещё накидать чем это хуже)
Ну т.е. если сравнивать с типичным кодом Битрикса, то это огромный шаг вперёд и выглядит на первый взгляд даже годно. Тут можно только поздравить, что у разработчиков наконец удалось написать код, от которого не хочется сразу вырвать себе глаза. Но это касается исключительно неймспейса Bitrix\Main\Validation\Xxx
...
А если же сравнивать с тем же Symfony, то, например у меня, сразу возникает такой же вопрос "зачем": Т.к. фактически это копипаста существующего решения, но с худшей реализацией и наличием критичных (в т.ч. архитектурных) косяков, которые не позволяют нормально использовать этот компонент. Ну помимо того, что использовать его просто невозможно ввиду отсутствия в пакагисте)))
Отсюда, с точки зрения здравого смысла и этот вопрос: Зачем делать то, что и так существует, только архитектурно неправильно и в целом хуже? И варианта кроме как "потому что могут" тут, боюсь что нет.
Чем хуже конкретно данный валидатор?
Подкол был в том, что у вас возникли вопросы к Битрикс, и не возникли к Yii и Laravel, которые тоже свои валидаторы сделали, а не заиспользовали Symfony ;)
1. Атрибуты, которые семантически должны представлять из себя классы метадаты отвечают ещё за валидацию. Смешение логики и правил маппингов.
А почему вы так решили? Валидацией занимаются валидаторы, атрибуты привязываются к полю и поставляют валидаторы, которыми это поле нужно проверить. В самой статье есть отдельный абзац и пример про использование валидаторов без атрибутов.
2. В примерах кода не вижу вообще возможностей вынести правила валидации отдельно от DTO, например в yaml, php, json, etc. Чтобы правила можно было указывать во внешних файлах и изолировать от DTO.
Как мне кажется, нигде кроме symfony вы и не найдёте вынос правил валидации в yaml файл :D
Нужно ли валидацию насколько далеко уносить от кода, который её использует? Очень сомнительно.
3. Не вижу зависимых правил и сложных выражений, типа
When X then (Y or Z)
. И даже реализовать подобное невозможно, кажется, учитывая то что в правила валидации приходит значение только одного поля.
Если речь про атрибут свойства - то да, валидироваться будет только значение одного свойства.
Если сделать атрибут класса - то он принимает весь объект и может формировать любые правила и условия. В статье проверка нескольких полей отражена в примере AtLeastOnePropertyNotEmpty
Напишите пример как это должно работать по вашему мнению, желательно на примере валидаторов симфони, раз уж вы начали сравнивать с ним ;)
4.Способа внедрить в конструктор в валидаторы тоже не вижу, т.к. см. п.1. Ну типа есть, например, сервис, предоставляющий анализ текста на "мат", как его всунуть в валидатор, чтоб сказать:
#[DoesNotContainSwearWords(criteria: 0.2)]
, который уже делегируется нужному валидатору, который содержит инфу и локализации, и нужные коннекты к сервису и прочее.
А в чем проблема? Создаете атрибут DoesNotContainSwearWords
, который принимает все настройки и поставляет нужный валидатор, создаете собственно этот валидатор DoesNotContainSwearWordsValidator
, который реализует необходимую вам логику.
5.Контекста и прочей инфы тоже нет, т.к. см. п.1
А прочей это какой? И насколько это надо для операции валидации конкретного поля?
Опять же если сопроводите примерами из symfony, будет невероятно великолепно ;)
6.А в виде пакета как это поставить и посмотреть? Ну вот я хочу использовать у себя этот пакет отдельно в проекте, например...
А вы в целом работали с Битрикс? Знаете что он не через composer устанавливается? :)
А если же сравнивать с тем же Symfony, то, например у меня, сразу возникает такой же вопрос "зачем": Т.к. фактически это копипаста существующего решения, но с худшей реализацией и наличием критичных (в т.ч. архитектурных) косяков, которые не позволяют нормально использовать этот компонент. Ну помимо того, что использовать его просто невозможно ввиду отсутствия в пакагисте)))
Потому что Битрикс это не библиотечка, которая собирается из packagist-a . Внедрять сторонний компонент, с кучей сторонних зависимостей, в коммерческий проект, который затем неизбежно будет зависеть от этого стороннего решения - крайне плохая мысль. Тем более если речь про конкретный функционал.
Адаптация и интеграция того самого великолепного решения, которое лучше в тыщу раз, под используемые в Битрикс классы и сущности также не задача из разряда "просто сделай composer require".
Ну и вам уже надо определиться с вашим отношением к валидации в Битрикс: это всё-таки "копи-паста" или же это "худшая реализация" ;)
Отсюда, с точки зрения здравого смысла и этот вопрос: Зачем делать то, что и так существует, только архитектурно неправильно и в целом хуже? И варианта кроме как "потому что могут" тут, боюсь что нет.
Я тоже с точки зрения здравого смысла не понимаю зачем нужны еще какие-то решения и фреймворки, если есть symfony ;)
Это ведь комментарии да?

Чем рутина написания валидации для конкретной формы на РНР или Джаваскрипте или подключением какого нибудь "симфонийского валидатора" отличается от рутины написания классов с атрибутами и функциями?
И как это работает на фронте?
Спасибо, буду пользоваться (͡°͜ʖ͡°)
Валидация в Битрикс: как упростить рутину