Юра
Ну что народ
Юра
Кто как аплоады файлов делает в рест апи?
Юра
Мультипартом шлёте или отдельный эндпоинт какой-то?
Denis
мультипартом на отдельный эндпоинт)
Юра
Т.е. энтити только через рилейшены на файлы завязаны получается?
Юра
Типо есть какая-то энтити аля MediaFile
Юра
И все остальные на неё?
Denis
да. в текущем проекте удобнее так
The Ant
Мультипартом шлёте или отдельный эндпоинт какой-то?
отдельным, на ендпоинте читаю стдин и пишу в файл, стримом, чтоб не жрать память.
Юра
Я тут просто нашел два выхода чтобы в обычный рест интегрировать мультипарт
Юра
Либо активировать настройку в пхп
Юра
Либо использовать https://github.com/notihnio/php-multipart-form-data-parser
Юра
Остановился на библиотеке
Igor
Добрый день, сериализовал ли кто-нибудь object или массив на пхпшный лад, с выполнением Closure внутри? Нужно сделать serialize() Guzzle/Client с сохранением переменых
Konstantin
ох))
Юра
В джсон его засунь
Igor
В джсон его засунь
Потом мне все это дело вызвать надо, и в рамках джэйсона, вроде как, переменные среды (или не знаю, как правильно сказать) не учитываются. Мне затем вызвать инстанс этого Guzzle надо будет
Egor
Добрый день, сериализовал ли кто-нибудь object или массив на пхпшный лад, с выполнением Closure внутри? Нужно сделать serialize() Guzzle/Client с сохранением переменых
Неа, но с симфоневским сериализатором можно нормализатор\денормализатор свой сделать, чтобы логика приведения объекта к массиву и обратно была описана
Юра
По-моему проще сдедать какой-то ДТО из клиента и его сериализовать
Igor
По-моему проще сдедать какой-то ДТО из клиента и его сериализовать
С библиотекой имею дело, она сериализует это дело в кэш от react php, а затем его вызывает инстансы
Юра
Client - DTO - Json Json - DTO - Client
Юра
Ну можно написать кастомный нормалайзер денормалайзер только смысла в этом нет никакого
artem
artem
Katulos
Где аффтары шутейки нашли человека по имени "Сережа"?
Katulos
В нынешний то век
Thawne
Всем добрый день, прошу не хейтить за глупый вопрос) У меня в базе есть поле типа JSON, туда сохрняется дата, все отлично. Но как мне сделать так, что бы я могу добавить к этому массиву другую дату а не перезаписать эту, то есть если я сейчас выберу еще одну другую дату то он перезапишет эту…
Vlad
$entity->dayOff[] = '12.12.2022'
Thawne
$entity->dayOff[] = '12.12.2022'
офигеть, спасибо больше
Kirill
Котаны, а есть какой-нибудь норм десериайлайзер в дто из ассоциативного массива\жсон? Симфонёвый полная помойка, а жмс тормознутый совсем
Kirill
А больше что-то не гуглится. Фрактал - не вариант, там руками надо будет все, а хочется автоматики и с поддержкой дженериков\типизированных коллекций хотя бы
Konstantin
особо вариантов нет, либо кодген, либо симфони
Max
Я вариантов других не нашел. Симфоневский по красоте всё делает но тяжелый пздц. Пришлось руками перекладывать, т.к. он тяжелый ппц
Kirill
Не, симфони - это трешанина полная. Как раз пересиливаю себя чтоб не выкинуть его нахрен и не написать нормальный
Konstantin
если есть какая-то схема апи, типа сваггера, можно самим дтошки генерить и делать им именованный конструктор ::fromArray(array $data): self {}
Konstantin
я про вторую часть идеи
Kirill
Я вариантов других не нашел. Симфоневский по красоте всё делает но тяжелый пздц. Пришлось руками перекладывать, т.к. он тяжелый ппц
Ага, по красоте))) Пишешь: public function __construct( public int $some ) {} Присылаешь json: {some: "asdasd"} и он валится с typeerror, вместо ошибки валидации
Kirill
ну или тоже самое без промотуед проперти
Max
Там выключается исключение при проверке типа
Konstantin
а, так валидация - не задача сериалайзера. валидировать надо до того как десериалиуешь
Konstantin
иначе сериалайзер превратится вообще в адский комбайн, если на него еще задачу валидации возложить
Kirill
Ну не знаю, могли бы бридж на валидатор добавить
Kirill
чтоб можно было отловить название поля, ожидаемый тип и отправляемый
Kirill
а так, приходится регулярками из тайп эррора выдирать, потому что симфоня не умеет
Kirill
Особо доставляет такой кейс: public function __construct( public readonly DateTime $date ) {} {"date": "2019-07-07"} // OK {"date": "2019-42-42"} // TypeError: Expected DateTime, but string passed
Kirill
И выловить и превратить в: field "date" must be correct datetime string - нереально
Kirill
Я уж не говорю про то, что нормалайзеры глобально конфижатся и ограничить: public DateTime $date, // expected "Y-m-d" public DateTime $datetime, // expected "Y-m-d H:i:s" невозможно никак
Max
А почему не отвалидировать json до того, как начать сериализовать?
Kirill
Ну и невозможность сделать /** @var array<MessageDTO> */ public array $items тоже удручает
Kirill
А почему не отвалидировать json до того, как начать сериализовать?
ну так симфони валидатор по ДТО же валидирует))))
Konstantin
вообще, выглядит так, будто вам нужно схему апи описать, и не насиловать бедный сериалайзер заведомо невалидными данными
Konstantin
не должно такого быть, если у вас на обоих концах апи (клиент-сервер) описаны контракты этого апи в виде схемы
Kirill
Послать можно что угодно
Vlad
А почему не отвалидировать json до того, как начать сериализовать?
https://symfony.com/doc/current/components/serializer.html#collecting-type-errors-while-denormalizing
Konstantin
если какой-то кулхацкер шлёт руками запросы с заведомо битыми данными - ок, можно и упасть с тайп эррором
Kirill
https://symfony.com/doc/current/components/serializer.html#collecting-type-errors-while-denormalizing
работает ТОЛЬКО если поле не null и только если оно обычное проперти
Kirill
если как часть конструктора или нуллабл, то отваливается
Kirill
а версия сф?
5.4 но на 6.х такая же фигня
Konstantin
есть ишью на гх?
Kirill
Только некоторые
Vlad
работает ТОЛЬКО если поле не null и только если оно обычное проперти
правда? Получается мое гавно еще актуальное🤣 https://github.com/Myaza-Software/Schema-Validator
Kirill
Вот одно из https://github.com/symfony/symfony/issues/44925
Kirill
Т.е. это причина, почему нельзя выдрать название поля из partial denormalization ошибки
Kirill
и её тоже приходится руками регулярками разбирать, чтоб адаптировать в нормальный формат
Kirill
Сейчас и так пришлось обмазаться конвертерами ошибок, вида: MissingConstructorArgumentsException, NotEncodableValueException, PartialDenormalizationException, NotNormalizableValueException, пытаясь их как-то превратить в ValidationFailedException
Kirill
Но я уже устал везде костылить, т.к. просто так получить инфу где именно случилась проблема десериализации не получается
Kirill
Короче, в данном случае задача всего лишь найти пакет, который будет норм маршаллить. А написать сверху бридж, который будет адаптировать ошибки десериалайзера в симфонёвые валидатора - уже не проблема)
Konstantin
так ему не показывайте тип ошибки
Konstantin
просто "пришли невалидные данные"
Kirill
Нельзя так
Kirill
Нужно сказать ещё в каком месте ошибка
Kirill
что поле Х некорректное, например
Konstantin
у вас публичное апи или для своего фронтенда?
Kirill
Полупубличное под мобилки и веб.