Kirill
Генерить stdclass заглушку, переносить туда констреинты и наполнять. А потом уже маппить в ДТО на "чистовик"
Юра
Так это и будет дто
Kirill
Но проблема в том, что симфони не умеет в объекты, только в классы)
Юра
Хотя не
Юра
Я вообще почитал на гласдор отдывы о sensio labs, и как-то приуныл по поводу симфы
Konstantin
мне, всё же, кажется, что задача инженера - это уметь адаптироваться под текущие реалии и решать имеющиеся проблемы, а не херачить былинные велосипеды, заметая мусор под ковёр. начните с проблемы. ну там "фронтендеры шлют говно вместо данных" и попробуйте её решить как-то - технически, организационно. а потом уже пишите код
Kirill
Проблема в том, что любой школьник может захерачить говно, вместо данных)))
Konstantin
а это уже не ваша проблема
Konstantin
упали 400 invalid request и всё
Kirill
это самый крайний случай
Kirill
ну т.е. так сейчас и делается
Konstantin
это называется системный подход, он обязательно даст плюсы в будущем. все клиенты (мобилы/фронтендеры) научатся слать строго типизированные модели в заведомо валидном формате, а там глядишь и до протобафа какого недалеко, особо ничего менять не придется
Konstantin
а если мучаться из-за кривых рук коллег, изгаляясь на сервере, проект быстро превратится в кучу костылей
Konstantin
я бы еще понял, если бы у вас публичное апи было и там реально надо прям подробно каждому клиенту объяснять в чем он неправ. но для своих инхауз-клиентов тратить время я бы не стал
Kirill
Ты понимаешь, что невозможно просто так взять и обновить у всех клиентов приложение, когда по бизнес-требованиям вместо обычной даты рождения надо будет разрешить только 18+?
Kirill
И надо сказать об этом, что чуваки, 18+ год рождения у вас или идите лесом
Kirill
А если на такое придётся падать с ошибкой 400, то чуваки резко удивятся, когда у них будут постоянные ошибки в форме "данные заполнены некорректно" без инфы о том что за данные и где
Konstantin
да блин, мы будто разном. валидацию типов данных не делаем, отвечаем 400 invaid request на невалидные типы данных. остальную валидацию оставляем как есть - все эти ваши ассерты
Kirill
а если в ответе будет 400 +
"errors": {
"birthdate": ["must be less than 2004"],
}
То с этим хотя бы как-то можно жить
Konstantin
то есть если не удалось собрать дто потому что вместо даты массив - 400, если получилось дто собрать, но она невалидна по бизнес-рулам каким-то - отвечаем ошибками валидации
Kirill
Kirill
одно object DateTime , а другое string
Юра
ХЗ у меня нет модных ДТО и ошибка нормальная
Юра
Konstantin
Konstantin
с таким же успехом там может быть 2020-foo-30
Kirill
Ну да, тут согласен
Konstantin
это ничем с точки зрения сервера не отличается от date: [2020, "02", 30] и прочих извратов
Kirill
Но мне хотя бы получить сообщение о том в каком поле именно некорректные данные)
Kirill
А не просто "весь запрос говно"
Kirill
Ну и в любом случае это ненадёжно, т.к. в симфони разыне типы ошибок в разных случаях
Kirill
тайп эррор лишь частный случай из ~6+ других типов исключений
Юра
Варик
Юра
Валидируешь массив через json schema
Юра
Потом уже в дто
Юра
Варик номер два
Юра
Валидируешь массив симфой
Юра
Потом в дто
Юра
Даёшь больше дто и валидаций
Kirill
Ну я решил послушаться и в 400 сразу конвертить в случае ошибок типов
Kirill
Без конкретизации
Юра
Вообще как по мне правильнее вадидировать массив перед ДТО
Юра
Потому что дто это уже структура ожидающая поавильный ФОРМАТ данных
Юра
В любом другом языке со строгой типизацией ты хрен засунеш в дто инт вместо стринга
Юра
Поэтому даже пытаться туда засунуть неправильные данные как по мне неправильно
Юра
Это 500 ошибка должна быть по идее
Юра
Но в пхп все как всегда с особенностями
Konstantin
да пхп как раз все правильно делает, не подразумевает сериалайзер валидацию типов
Юра
Так что делаем отдельнвй ДТО без типов, валидируем, потом мапим в дто с типами, потом мапим в дто который мапит в энтити
Юра
Итого 4325 ДТО
Kirill
Kirill
И вроде как это райт вей
Kirill
Потому что в той же ларке валидатор вешается как раз на запрос, а не на поля дто
Null
А можно не пилить велосипедов и воспользоваться
https://packagist.org/packages/nelexa/request-dto-bundle
Вадим
Юра
та ну
Юра
плохой совет
Юра
что такого в том чтобы затащить пакет
Юра
а потом приходишь на проект, а там куча велосипедов, с багами, автор которых уволился пол года назад из компании и след его пропал
Юра
Если ты оформишь свой велосипед в пакет, и напишешь к нему доку то круто
Юра
Только такой пакет уже есть )
Юра
Или например новая версия симфы вышла. Свой велосипед надо самому поддерживать. У пакеты есть большая вароятность что его автор сам все сделает и оно будет работать
Юра
Ну есть конечно вероятность что автор забьет болт, ну тогда комьюнити решает
Null
Null
https://github.com/TelegramBot/Api
Этих бы кто подхватил
Konstantin
а они там чуть ли не в стандартной поставке симфони были, и инсталлов у них до жопы просто. но всем похеру
Null
Та уже бы сбор средств какой организовали
Юра
Поэтому я смотрю в сторону джавы
Юра
Там все более серьезно и нету такого треша
Юра
По крайней мере ключевые технологии там поддерживаются всегда
Юра
А пхп судя по всему помрет
Null
:D В очередной раз?
Юра
Ну точнее не помрет
Юра
Останется вордпресс
Юра
И всякие ларки
Юра
Для поделок
Null
Не начинай. Симфони эт как раз новая жизнь пыхи.
Я после всяких самописных ворков и ларавела как глоток свежего воздуха на ней вдохнул.