Alexey Mishurovskiy
Ваш вариант описания схемы не очень понятно выглядит
ну а что не понятно? принимаю id в поле terminal далее entity extractor мне его разворачивает в entity (находит в бд по id) и тогда сущность сохраняется,либо не разворачивает и тогда ошибка запроса
Alexander
Nikolay
Alexander
Дто передаём в сервис
Alexey Mishurovskiy
Дто лучше
тогда смысл сваггера теряется. проще просто доку править в doc файле и не морочится 😊
Nikolay
Nikolay
Alexey Mishurovskiy
Получается мне надо каким-то образом(каким?) изменять тип поля в зависимости от группы сериализации
Alexey Mishurovskiy
т.к. в одном случае мне понадовится только id а в другом полный объект
Alexander
а со всторым пытаюсь понять. по факту terminal поле это id и он должен существовать. сваггер мне разворачивает его в объект. как от этого избавится ?
Написать свой нормалайзер для сериалайзера под конкретную энтити. Выглядит все это как-то стремновато.
Я делаю так:
Контролер принимает запрос
1) из запроса десереализуем json в DTO
2) дто валидируется валидатором
3) если ошибок валидации нет передаем дто в сервис
4) ответ сервиса сериализуем сериалайзером
Смысл дто в том, что она может быть кривой, невалидной, id может не существовать а в полях вместо интов могут быть стринги или массивы. Но энтити всегда валидна и у нее не может быть сломанного состояния (это достигается именованными конструкторами и т.д.: отдельная тема).
В качестве бонуса можем использовать дто в опенапи аннотациях.
Alexander
Ну и дто мы пишем не для контроллеров, а для сервисов. Задача контроллера это дто из запроса собрать и отвалидировать.
Alexander
В консоли то же самое дто каким-то другим образом будет собираться.
Alexey Mishurovskiy
Alexander
А как вы сейчас кладете запрос с 100 полями на сущность?
Alexey Mishurovskiy
с помощью сералайзера.
Alexey Mishurovskiy
денормализовать\нормализовать получается через массив ?
Alexey Mishurovskiy
а если сложная вложенная структура ?
Alexander
да
Alexey Mishurovskiy
хотя по факту тоже самое, просто добавляется прослойка в виде ДТО
Alexander
нормалайзер - из массива в объект/из объекта в массив
енкодер - из массива в стрингу/из стринги в массив
Alexander
Alexander
Только вы валидируете сущность, а это не очень хорошо по ряду соображений.
Alexey Mishurovskiy
а как в вашем слуае валиировать сущность на наличие по id? или это уже елается на этапе нормализации ДТО в сущность ?
Alexander
точно также все как и сейчас делаете, только правила валидации не в сущности, а в дто
Alexander
https://www.thinktocode.com/2018/04/02/symfony-4-rest-api-part-2-data-transfer-object/
Пример как можно организовать маппинг дто в энтити.
Alexey Mishurovskiy
Alexander
Может показаться избыточным, но когда сущности кидают исключения при попытке запихать в поле какую-нибудь дичь, разработчики спят гораздо спокойнее.
Alexey Mishurovskiy
когда одну и ту же сущность надо замаппить с разных ДТО - соответственно разные методы в сервисе ?
Alexey Mishurovskiy
с тайпхинтом нужного ДТО ?
Alexander
с тайпхинтом нужного ДТО ?
От задач зависит, универсального ответа нет.
Где-то приходится делать CreatePaymentDto, UpdatePaymentDto и т.д., где-то хватает одной PaymentDto.
Alexey Mishurovskiy
Вопрос как в обратную сторону - сериализуете тоже ДТО ? или сущность по группе ?
Alexander
Alexey Mishurovskiy
спасибо ) решил проверить что у меня мысль работает в правильном направлении )
Alexander
Не за что )
Andrei
Andrei
Могет тело реквеста автопилотом мапить на dto
Alexey Mishurovskiy
Так это сериалайзер может, нет?
Andrei
Возможно юзает, не заглядывал внутрь
Andrei
Там просто в экшен контроллера передашь типизированный параметр дто, и он её инжектит смепленную уже из реквеста
Юра
Alexey Mishurovskiy
Юра
https://github.com/zim32/symfony-skeleton-rest-only/blob/v5.2.8/src/Entity/Book.php
Юра
смотри поле author
Юра
там у меня есть свой анотейшн процессор который это разруливает
Alexander
Юра
Что именно работает?
Юра
Мой процессор там не про дтошки вообше
Alexander
Не правильно понял значит, прошу прощения
Юра
Он создает схемы на основе груп сериализации, чтобы в доке асе правильно было. Плюс есть возможность указать разные типы пропертей для разных схем
Юра
Дтошки не юзаю, справляюсь сериалайзером
Денис
А от fos лучше вообще никакие бандлы не использовать.
Прошу прощения, а почему? Что с ними не так?
Alexander
А ну так это не важно, дто или энтити - сериалайзеру без разницы.
Alexander
Все что у них был путного давно уже завезли в саму симфу, включая пользователей.
Денис
понятно.
Денис
Для эластика бандл их юзал, альтернативы не нашел
Alexander
Для эластика бандл их юзал, альтернативы не нашел
Мало с эластикой в пхп работал, хватало официальной либы. Там все на массивах, т.е. она достаточно низкоуровневая, но и задачи были не сложные.
Не буду критиковать того что не пробовал - возможно этот бандл вполне не плох.
Больше всего боли доставил именно fosrestbundle. У них бандлы не очень много кода содержат, который является, по большей части, обвесом над другими библиотеками/компонентами.
Если нужна скорость разработки - вполне пойдет. Если нужен контроль над происходящим и стабильность - проще обвес сделать самостоятельно.
Например они поддерживают и сериалайзер симфони и jms. Больше кода - больше багов, меньше скорость и т.д.
Денис
Денис
Alexander
Читайте исходники того что тащите 😄
Alexander
https://github.com/doctrine/orm/blob/2.9.x/lib/Doctrine/ORM/UnitOfWork.php
Это полезно и "сеньерам" городящим 1000 и 1 класс на простейшие задачи с фабриками абстрактных фабрик.
Но за пример такое брать я бы не стал конечно )
Alexander
Так тащите классы из бандлов. Тот же парамконвертер я видел в куче проектов без фосреста. И сразу понимаю что это такое и с чем его едят. Вариации бывают конечно, но это не сильно портит жизнь. В конце концов у каждого проекта своя специфика.
Денис
Maks
Под конец месяца новых вакансий подвезли, кому интересно @symfonyjobs
Alexey Mishurovskiy
КОллеги, подскажите плиз хороший зарубежный хостинг, где есть возхможность VPSки организовать в ЛВС? помимо DO, AWS и Vultur
Alexander
Hetzner
Alexey Mishurovskiy
Hetzner
А если более абузоустойчивый ?
Юра
Inferno solutions
Юра
Норм пацаны
Юра
Есть сервера забугром