крудовые сценарии, где nullable поля?
Например кейс: юзер может установить "пол", "о себе", "отчество". Чисто по логике никто не мешает эти данные заполнять в какой угодно комбинаторике (т.е. что-то с фронта отослать, а что-то нет). Не вижу смысла создавать несколько юзкейсов, проще один EditProfile с сеттерами
$user->setGender($command->gender);
$user->setInfo($command->info);
$user->setPatronymic($command->patronymic);
Проблема: если фронт зашлет только "пол", то затрутся остальные поля. Заставлять фронт слать что-то лишнее (т.е. всегда три поля) - ну такое себе. Я делал, что если null - то вообще ничего не делается, а если фронт хочет стереть - от пусть шлет пустую строку. Работает - но выглядит стремненько. Плюс это не сработает с int, выходит надо делать mixed/union type: string|int.
Как вы такие кейсы решаете?
а почему эту лабуду в json не засунуть? зачем мест ов строках занимаь? ну и сеттеры — коммон, в пхп 7.4 ввели тайпед проперти, я для такого круда юзаю public и мне норм (серьезно) а там, где критично контролирвоать переходы состояния — там нет и геттеров даже, не то что сеттеров
Не нормализованно как-то ) И даже если так, как это поможет? Мержить array - прощай спецификация. Да, один из самый интересных путей - тупо засериализовать на объект, но тогда в комманде не будет понятных аргументов
С таким конфигом, нужно перед гидрацией входящих данных предварительно заполнять ДТО текущими данными. Дальше их затирает уже фронт тем, что прислал.
ну пусть будет простая структура с полями, ее в JSON и забыли
Т.е. доставать сущность, мапить на дто, потом мержить данные? Ну чет такое себе... причем на этапе контроллера
Просто эта страуктура не будет описана, вот в чем проблема
так опиши объектом, а не массивом
SELECT NEW UpdateAddressRequest Можно прямо средствами DQL
Так вот у меня есть объект с nullable проперти. Как мне понять - они null потому что их фронт не прислал, или null потому что он специально прислал ?)
Все равно это на уровне контроллера.
Можно вынести на уровень ArgumentResolver
В ApiPlatform схожий принцип, разница лишь в том, что там он зарыт где-то в кишках
Верно, хотелось бы именно это, у них это через сериализатор и массив
Обсуждают сегодня