Как стать автором
Обновить

Комментарии 15

Какие же крутые вещи привнёс php8 с атрибутами и именованными аргументами. Просто мощные, удобные и красивые фичи. Одно наслаждение

Не очень радует инициализации правил через new, но видимо это правильный подход. С валидацией в Laravel можно заменить простые правила в проде required на enum + статичные методы для комплексных правил с параметрами, но всё же реализация из статьи более практичная.

Спасибо

Я немного отстал от темы, поэтому хотел бы поинтересоваться: стоит ли для нового проекта уже брать за основу Yii3, или пока ещё рановато?

Смотря какие требования у проекта. Большая часть пакетов Yii3 уже стабильна, но некоторые ещё нет. Если у вас наберётся много тех, что нет, то у вас два выхода:

  1. Ждать. Так делает большинство.

  2. Использовать для них dev-master или фиксануться на определённой версии и иногда чинить. Так многие делают в нашем чатике в телеграме.

Чем лучше от уже давно существующего Symfony Validator?

Надо посмотреть, что там в Symfony Validator чтобы нормально сравнить...

Там смотреть нечего, есть отличная документация
https://symfony.com/doc/current/validation.html
https://symfony.com/doc/current/components/validator.html
Очень удобные кастомные валидаторы, да и в целом - отличный компонент.

Посмотрел. Да, хороший компонент. По фичам почти сходные.

Отличия валидатора Yii от Symfony Validator:

  1. Есть контекст у валидатора поля. То есть можно легко валидировать, например, "повторить пароль" или валидировать город по указанной стране.

  2. Перевод сообщений из коробки, в том числе имён атрибутов.

  3. Экспорт правил в виде массивов для frontend / CMF.

  4. Удобные способы получать сообщения об ошибках в разных форматах.

  5. Стиль именования.

  6. Код несколько проще.

  7. Не понял, как у Symfony validator посмотреть покрытие тестами. Но вроде их там не мало. У нас 100% + 100% MSI.

Чего нет:

  1. Возможности задать уровень ошибки, https://symfony.com/doc/current/validation/severity.html

  2. Специфичных конкретных правил валидации (но это добавить проще некуда, к тому же https://github.com/yiisoft/validator/blob/master/docs/guide/en/extensions.md#wrapper-for-symfony-rules).

  1. Есть, в валидаторе: $this->content->getObject()

  2. Переводы есть. https://github.com/symfony/validator/tree/6.2/Resources/translations

  3. Не было никогда необходимости, т.к. на бек валидация всегда отличается от фронта. Кому нужно - существуют готовые бандлы.

  4. Не понятно что имеется ввиду. Имеем коллекцию ошибок с объектами https://github.com/symfony/validator/blob/6.2/ConstraintViolationInterface.php - удобно работать.

  5. Дело привычки, но как по мне, у симфони - именование более семантически правильное.

  6. Код простой, никогда не вызывал трудностей.

  7. 100% покрытие кода тестами - куча материала на эту тему. Процитирую автора Проблемы тестирования: почему 100% покрытие кода это плохо
    > это просто ачивка, за которой могут скрываться реальные проблемы.

  1. Для решения этой проблемы придумали мутационное тестирование. Оно не панацея, но сильно снижает вероятность что-то прошляпить. Видимо, авторы указанной вами статьи о нём не знали в момент написания.

К чему это? Ты можешь покрыть код тестами на 100%, задействовать мутационное тестирование - какая гарантия, что не будет багов или уязвимостей?

100% гарантии нет, но практика показывает, что при 100% покрытии модульными тестами + 100% мутационное тестирование + использование статических анализаторов вероятность появления багов сильно снижается, так как в процессе описанных выше процессов они обнаруживаются и исправляются.

Суть мутационных тестов - проверить, что при изменении поведения тестируемого кода результат теста тоже изменится.

От ошибок в алгоритме это не спасёт, но незаметно добавить баг будет намного сложнее.

Если уж что-то и объявлять злом, так это моки существующих классов)

Спасибо.

  1. Переводы атрибутов тоже есть?

  2. У меня обратный опыт. Сначала валидируется фронт чтобы бэк не грузить. Потом бэк. А что за бандлы? Очень интересно глянуть, как это решено.

  3. https://github.com/yiisoft/validator/blob/master/docs/guide/en/result.md#errors

От валидатора пахнет Symfony )

Правда пока ждали валидатор от Yii, пришлось использовать symfony/validator, а сейчас к сожалению нет смысла переписывать правила.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории