Добавлю шума :) Вопрос кто юзает command/handler. Как обрабатываете

крудовые сценарии, где nullable поля?
Например кейс: юзер может установить "пол", "о себе", "отчество". Чисто по логике никто не мешает эти данные заполнять в какой угодно комбинаторике (т.е. что-то с фронта отослать, а что-то нет). Не вижу смысла создавать несколько юзкейсов, проще один EditProfile с сеттерами
$user->setGender($command->gender);
$user->setInfo($command->info);
$user->setPatronymic($command->patronymic);
Проблема: если фронт зашлет только "пол", то затрутся остальные поля. Заставлять фронт слать что-то лишнее (т.е. всегда три поля) - ну такое себе. Я делал, что если null - то вообще ничего не делается, а если фронт хочет стереть - от пусть шлет пустую строку. Работает - но выглядит стремненько. Плюс это не сработает с int, выходит надо делать mixed/union type: string|int.
Как вы такие кейсы решаете?

14 ответов

7 просмотров

а почему эту лабуду в json не засунуть? зачем мест ов строках занимаь? ну и сеттеры — коммон, в пхп 7.4 ввели тайпед проперти, я для такого круда юзаю public и мне норм (серьезно) а там, где критично контролирвоать переходы состояния — там нет и геттеров даже, не то что сеттеров

Павел-Г. Автор вопроса
Максим Федоров
а почему эту лабуду в json не засунуть? зачем мест...

Не нормализованно как-то ) И даже если так, как это поможет? Мержить array - прощай спецификация. Да, один из самый интересных путей - тупо засериализовать на объект, но тогда в комманде не будет понятных аргументов

С таким конфигом, нужно перед гидрацией входящих данных предварительно заполнять ДТО текущими данными. Дальше их затирает уже фронт тем, что прислал.

Павел Г.
Не нормализованно как-то ) И даже если так, как эт...

ну пусть будет простая структура с полями, ее в JSON и забыли

Павел-Г. Автор вопроса
Oleg Okwinza
С таким конфигом, нужно перед гидрацией входящих д...

Т.е. доставать сущность, мапить на дто, потом мержить данные? Ну чет такое себе... причем на этапе контроллера

Павел-Г. Автор вопроса
Максим Федоров
ну пусть будет простая структура с полями, ее в JS...

Просто эта страуктура не будет описана, вот в чем проблема

Павел Г.
Т.е. доставать сущность, мапить на дто, потом мерж...

SELECT NEW UpdateAddressRequest Можно прямо средствами DQL

Павел-Г. Автор вопроса
Максим Федоров
так опиши объектом, а не массивом

Так вот у меня есть объект с nullable проперти. Как мне понять - они null потому что их фронт не прислал, или null потому что он специально прислал ?)

Павел-Г. Автор вопроса
Oleg Okwinza
SELECT NEW UpdateAddressRequest Можно прямо средст...

Все равно это на уровне контроллера.

Павел Г.
Все равно это на уровне контроллера.

Можно вынести на уровень ArgumentResolver

Павел Г.
Т.е. доставать сущность, мапить на дто, потом мерж...

В ApiPlatform схожий принцип, разница лишь в том, что там он зарыт где-то в кишках

Павел-Г. Автор вопроса
Oleg Okwinza
В ApiPlatform схожий принцип, разница лишь в том, ...

Верно, хотелось бы именно это, у них это через сериализатор и массив

Похожие вопросы

Обсуждают сегодня

Всем доброго вечера! Хочу поделиться своим злоключением с человеком, который, как оказалось сюда тоже скидывал свое резюме. Жаль, что я вашу группу не нашел раньше… человек ки...
Роман Ахмедзянов
4
Привет, кто может сделать юзербота с апи? Задачи: - создавать группы - создавать каналы - задавать для созданных каналов аватарку или эмоджи, имя группы - добавлять в группы...
Lencore
11
Всем привет, Добавил в плагин определение user agent public function registerMarkupTags() { return [ 'filters' => [ 'staticPage' => ['RainLab\Pages\Cl...
John Norton Kruger
3
А чего при переходе с 2 на 3 все что в билдере сделано тютю?
Денис Александрович
5
Я колись ставив гуглу антиспам 3.0, може і норм, але мені не дуже зайшло. Теж думав тиждень, що його і куди. Зупинився на трех варіантах відразу всі три і включив 1. Перевір...
𝓔𝓾𝓰𝓮𝓷𝓮𝓥 J
2
К слову, почему бы не использовать ссылки на папки, вместо инвайтинга?
Артем Уколов
3
Портфолио: Зовут меня Александр, мне 36 лет. Город Пушкино. Общий рабочий стаж: ~14 лет Уровень квалификации: Senior Full-stack developer Где прочесть мой код? https://github....
Magic
10
Всем привет, может кто знает нормальных иностранных хостинг провайдеров. Что бы по качеству аналогичные netangels, beget, timeweb?
Black Cat
4
Кастомные эмодзи для ботов доступны только элите, верно?
山 | Bobby | 山
3
где собака, админ группы? нычкуется и боится проявить волю, в толерантность еще не наигрался? @yelizariev
Ognezar
61
Карта сайта