Comments 15
Я немного отстал от темы, поэтому хотел бы поинтересоваться: стоит ли для нового проекта уже брать за основу Yii3, или пока ещё рановато?
Смотря какие требования у проекта. Большая часть пакетов Yii3 уже стабильна, но некоторые ещё нет. Если у вас наберётся много тех, что нет, то у вас два выхода:
Ждать. Так делает большинство.
Использовать для них dev-master или фиксануться на определённой версии и иногда чинить. Так многие делают в нашем чатике в телеграме.
Чем лучше от уже давно существующего Symfony Validator?
Надо посмотреть, что там в Symfony Validator чтобы нормально сравнить...
Там смотреть нечего, есть отличная документация
https://symfony.com/doc/current/validation.html
https://symfony.com/doc/current/components/validator.html
Очень удобные кастомные валидаторы, да и в целом - отличный компонент.
Посмотрел. Да, хороший компонент. По фичам почти сходные.
Отличия валидатора Yii от Symfony Validator:
Есть контекст у валидатора поля. То есть можно легко валидировать, например, "повторить пароль" или валидировать город по указанной стране.
Перевод сообщений из коробки, в том числе имён атрибутов.
Экспорт правил в виде массивов для frontend / CMF.
Удобные способы получать сообщения об ошибках в разных форматах.
Стиль именования.
Код несколько проще.
Не понял, как у Symfony validator посмотреть покрытие тестами. Но вроде их там не мало. У нас 100% + 100% MSI.
Чего нет:
Возможности задать уровень ошибки, https://symfony.com/doc/current/validation/severity.html
Специфичных конкретных правил валидации (но это добавить проще некуда, к тому же https://github.com/yiisoft/validator/blob/master/docs/guide/en/extensions.md#wrapper-for-symfony-rules).
Есть, в валидаторе: $this->content->getObject()
Переводы есть. https://github.com/symfony/validator/tree/6.2/Resources/translations
Не было никогда необходимости, т.к. на бек валидация всегда отличается от фронта. Кому нужно - существуют готовые бандлы.
Не понятно что имеется ввиду. Имеем коллекцию ошибок с объектами https://github.com/symfony/validator/blob/6.2/ConstraintViolationInterface.php - удобно работать.
Дело привычки, но как по мне, у симфони - именование более семантически правильное.
Код простой, никогда не вызывал трудностей.
100% покрытие кода тестами - куча материала на эту тему. Процитирую автора Проблемы тестирования: почему 100% покрытие кода это плохо
> это просто ачивка, за которой могут скрываться реальные проблемы.
Для решения этой проблемы придумали мутационное тестирование. Оно не панацея, но сильно снижает вероятность что-то прошляпить. Видимо, авторы указанной вами статьи о нём не знали в момент написания.
К чему это? Ты можешь покрыть код тестами на 100%, задействовать мутационное тестирование - какая гарантия, что не будет багов или уязвимостей?
100% гарантии нет, но практика показывает, что при 100% покрытии модульными тестами + 100% мутационное тестирование + использование статических анализаторов вероятность появления багов сильно снижается, так как в процессе описанных выше процессов они обнаруживаются и исправляются.
Суть мутационных тестов - проверить, что при изменении поведения тестируемого кода результат теста тоже изменится.
От ошибок в алгоритме это не спасёт, но незаметно добавить баг будет намного сложнее.
Если уж что-то и объявлять злом, так это моки существующих классов)
Спасибо.
Переводы атрибутов тоже есть?
У меня обратный опыт. Сначала валидируется фронт чтобы бэк не грузить. Потом бэк. А что за бандлы? Очень интересно глянуть, как это решено.
https://github.com/yiisoft/validator/blob/master/docs/guide/en/result.md#errors
Можно обойтись без бандлов: https://gist.github.com/BoShurik/009cdeef1fb7a43fc1856feaaf317062
От валидатора пахнет Symfony )
Правда пока ждали валидатор от Yii, пришлось использовать symfony/validator, а сейчас к сожалению нет смысла переписывать правила.
Yii Validator — простой и мощный