Kirill
Т.е. при желании к нему любой может получить доступ и юзать
Konstantin
просто если обмазаться сваггерами, то свой клиент не может послать кривые данные, физически. по крайней мере, пока версия клиента-сервера не разойдутся. следовательно, можно не уточнять что за ошибка. мы, например, по сваггер-схеме валидируем сразу на клиенте, чтобы клиент даже не пытался битые данные отправить. тогда можно особо не уточнять где ошибка, пусть фронтендеры/мобильщики сами об этом думают
Kirill
Поэтому и нужен маппинг, чтоб проинформировать в каком месте ошибка, а фронты смогли замаппить её на вебморду нормально и красненьким поле посветить, например
Konstantin
формат полей формы != формату полей апи ведь, опасно так делать. посередине должно быть какое-то их дто
Kirill
Kirill
Kirill
Надо всего лишь сказать:
"errors": {"field": ["must be greater than 0", "must not be empty"], "xxx": [...]}
Konstantin
получится вообще удобно - не надо будет дублировать правила валидации между моделью (ассерт-аттрибутами) и сваггер-схемой
Kirill
Это слои разные
Kirill
Ну т.е. есть доменная валидация, которая на порядки шире, нежели сваггер
Kirill
Ну например, что дата дня рождения должа быть больше 1900 года
Kirill
Под сваггер не ложится, а на симфонёвый констреинт у реквест ДТО вполне
Kirill
Осталось лишь наполнить его данными или как-то сообщить, что данные некорректные
Kirill
и вот со второй частью постоянно какой-то лютый *;?№(*№"?;(
Dmitriy
Есть ошибки валидации для пользователей, а есть ошибки фронтенд-программистов, это как бы совсем разные вещи
Dmitriy
когда фронт накосячил с форматом запроса, ему не нужна ошибка в "красивом виде" как для пользователя
Dmitriy
а то что пользователь ввел дич, так фронт пусть пользователю и сообщает
Kirill
Ок, пусть будет код ошибки, а не сообщение
Kirill
Один хрен, нужно сопоставить с тем в каком месте она возникает
Kirill
В каком поле т.е.
Kirill
Так там тип стоит дататайм)
Konstantin
Dmitriy
400 "Не верный формат запроса, кури схему"
Kirill
Ага, сейчас так и выкручиваться приходится
Kirill
Только надо сказать ещё где именно косяк
Kirill
а не сразу сваливаться в корку
Konstantin
это правда ок) пусть юзают кодген и сваггер-модели, сейчас, полагаю, они руками шлют фетч-запросы
Dmitriy
а то могут и отправить невалидный json типа {"name": 123,
Юра
Сериализатор все нормально делает
Юра
Ошибки типов включаются
Юра
И превращаются в ошибки валидации
Dmitriy
да, выше ссылку кидали
Kirill
Нет, это я хочу взять ошибку типов и превратить в ошибку валидации
Юра
Так что можно конечно тнаписать велосипед как это принято в пхпч а можно просто почитать как работает и использовать
Kirill
а приходится регулярками выдирать из перечисленных мною возможных ситуаций, да и то генерить общие, 400 и иди нафиг
Юра
Юра
Напишет что ожидает такой-то тип а передан такой-то
Kirill
Ага, в поле ДТО
Kirill
без информации о том откуда, чем и почему оно пыталось его наполнить
Юра
Ничего не понятно
Kirill
Мне нахрена светить наружу ошибку: UserProfileUpdateRequestDTO::__construct(): Argument #7 ($birth_date) must be of type ?DateTimeInterface, string given?
Konstantin
про "написать свой, который будет это проверять". особо не выйдет это сделать нормально: надо ведь будет рефлексию подключать, в рантайне выяснять есть ли такие поля в этом классе, как во входящем джсоне, ну либо конкретно заморачиваться с кешированием метаданных, кодгеном итд
Kirill
Так здрасть, симфони так и работает
Vlad
Кароче пока умеет валидировать только "плоские" объекты
Kirill
Да, и без типов
Vlad
ну вот гавно я свое писал,оно все умеет
Kirill
Как только появляются типы или объект перестаёт быть плоским - симфони можно выкидывать
Vlad
и коллекции тоже
Kirill
и коллекции тоже
под плоским это и подразумевается))) Пока не сталкивался, но у нас есть такие кейсы, так что эта попаболь ещё предстоит
Vlad
Konstantin
Так здрасть, симфони так и работает
да, но там довольно дохера достаточно сложного кода, что это делает. написать свой сериалайзер, только лучше а заодно еще и быстрее - это еще больше кода, тестов и мучений. их не зря на рынке полторы штуки - потому что это сложно делать
Kirill
Ну не так уж и сложно
Vlad
++
Konstantin
нууууу, не, велкам, жду ссылку, первым же звезду поставлю
Юра
Плюс один костыль в коллекцию ДТО)
Vlad
ставь звезду,я написал https://github.com/Myaza-Software/Schema-Validator 🤣🤣
Kirill
это для схемы, а надо для дто)
Vlad
так ты дто скамливаешь але)
Юра
Попробуй без ДТО
Kirill
дто и есть схема
Юра
)
Kirill
*873
Konstantin
Юра
П..ц
Null
Юра
Там в ишью вроде воркаэраунд есть
Юра
Сделай форк
Kirill
Та это хрень, и так уже закостылено
Юра
Это проще чем писать сериализатор с нуля
Kirill
Проблема в том, что это всего лишь одна ошибка
Kirill
А таких ошибок там около 10ка
Kirill
Потому что в случае ошибок внутри денормалайзера - оно не попадает в партиал денормализейшн вообще, например
Юра
Блин херачье все в stdclass и допишите туда аннотация типов
Юра
)
Kirill
Это кстати самый норм вариант
Kirill
Тоже надумал