Юра
Я к тому что к примеру, у тебя в дто стоит не нулабл поле, в реквесте нуль прилетает
Юра
Че дальше?
Юра
Или в дто всё нулабл?
Konstantin
Я к тому что к примеру, у тебя в дто стоит не нулабл поле, в реквесте нуль прилетает
конструктор/валидатор не пропустил создание такой дто
Юра
Или ты руками риквест мапиш в ДТО и проверяешь на нул?
Юра
И че
Юра
Вместо ошибки валидации 500 ошибка потому что конструктор не пропустил?
Konstantin
так есть же валидатор
Konstantin
условный #[NotBlank] на поле
Юра
Валидатор работает с готовым дто
Юра
Как ты сделаешь готовый дто?
Юра
Как смапить нул в не нулабл поле?
Vlad
Или в дто всё нулабл?
нет. смотря как собираешь дто
Юра
Ну а как его надо собирать?
Vlad
ну если говорим про реквест с джосна с помощью серализера
Юра
Просто с этими тайпд пропертчми валидатор к херам сломан теперь
Vlad
а серализер уже собирет все ошибки
Vlad
https://symfony.com/doc/current/components/serializer.html#collecting-type-errors-while-denormalizing
Юра
Т.е. валидация нула теперь на валидаторе?
Vlad
нет)
Юра
Ой на сериализаторе
Vlad
дыа,так как связано с типизацией
Юра
И это надо его ошибку еще конвертировать в формат ошибок который фронту понятен
Vlad
ну уже все из коробки есть
Юра
Он возвращает constraints violation list?
Vlad
так в примере собирается же
Юра
Вижу да
Юра
Понял
Nikolay
Ладно всеравно непонятно. Почему нельзя проверять валидность энтити в валидаторе
Потому что entity по нормальному не должна валидироваться никогда через валидатор
Юра
Я просто дед и вылез из симфы когда там еще все вадидировали энтити
Юра
Во всех доках так было
Юра
Видимо с того времени непонимание что в этом плохого
Юра
И формы мапились напрямую в энтити
Юра
Как-то все работало
Юра
Да и сейчас на сайте симфы примеры кода валидатора с валидацией энтити
Юра
Юра
Это все видимо корни растут от того что каждый понимает под энтити. Для кого-то это просто метаданные для БД. Для других это бизнес объект
Юра
Если рассматривать энтити как метаданные, то согласен, нужна прослойка перед ними
Юра
Ну я бы тогда не брал вообще доктрину
Юра
Потому что это оверкил
Юра
Если вся логика и по сути отношения описаны в ДТО
Юра
Дублирование какое-то
Nikolay
Потому что это оверкил
Если не использовать некоторые костыли, то нормально
Юра
А где логика?
Nikolay
А где логика?
В сущностях
Юра
Допустим логика что полное имя это фамилия плюс имя
Konstantin
Ну я бы тогда не брал вообще доктрину
в этом есть определенный смысл, ну точнее выкинуть doctrine/orm. dbal вполне себе можно оставить с поправкой на то, что оно когда-нибудь научится в апсерты
Konstantin
но замучаешься процессить ассоциации, это прям реально будет болью
Nikolay
Допустим логика что полное имя это фамилия плюс имя
ДТО обычно валидируется на простые кейсы (длина, кол-во и тд, что-то посложнее в сущностях)
Konstantin
кстати, а ты знаешь, что в доктрине (орме) можно селектить прям в дто?
Konstantin
https://www.doctrine-project.org/projects/doctrine-orm/en/2.11/reference/dql-doctrine-query-language.html#new-operator-syntax
Юра
Я не знаю ибо мне никогда дто не нужен был )
Anton
Очень удобная фича, между прочим)
Anton
Регулярно юзаю, когда надо куски данных отдать
Anton
Валидируешь перед отдачей? )
Как правило нет. А собственно зачем?
Konstantin
дед троллит!
Anton
А, Сорян. Не выкупил(
Павел
Видимо с того времени непонимание что в этом плохого
Дело не в том, что это прям плохо, дело просто в подходе. Инкапсулирование логики в сущности дает некую защиту. С другой стороны, много сущностей почти без собственной логики и обычные круды. Например брать апи платформу, она вообще десериализует реквест сразу на энтити,без форм. Там же и валидирует, и сериалайз делает, и акссес лаер - все в сущности. И в принципе, это очень удобно и быстро там где почти нет логики. Но где логика - придаст боли и проблем. Некоторые вообще используют паралельно несколько методов, плюс вообще транзакшн скрипт, и это неплохо. Короче вопрос неоднозначный. Просто хорошо знать плюсы, минусы и варианты.
Юра
Согласен. ДТО маст хев если много мест в коде где нужно создавать энтити в разных условиях
Юра
А если единственное место где она создаётся это метод контроллера то там мне кажется и без дто можно
Юра
А то получается какой-то RTO
Юра
Request transfer object
Юра
Хотя я заметил что в компилируемых языках намного чаще если не почти всегда используется dto, поэтому может это просто хороший способ писать как надо
Павел
ДТО в принципе удобны для типизации, ну а симфони накладывает еще и плюхи с валидацией. Всегда понятнее что трубуется в метод, если в него прилетает дто, а не массив непонятный. Ну а десериализатор делает жизнь еще проще)
Юра
Вообще это дто можно сказать немного недоделанный паттерн команда
Павел
Вообще это дто можно сказать немного недоделанный паттерн команда
Ну не, это стандарт рефакторинга, что когда много параметров у метода, то сделать объект
Konstantin
дто - это паттерн "структура", не больше и не меньше. это просто способ добавить типизации ассоциативным массивам
Юра
Если развить идею ДТО то в итоге прийдёшь к команде
Konstantin
не надо усложнять, это вообще не про проектирование, это просто способ упорядочить данные
Павел
Но не стоит усложнять
Юра
Просто видимо в чем трабла
Юра
Мне кажется что дто это какая-то полумера
Юра
Что-то такое посередине