Roman
/** * @ORM\Id * @ORM\Column(type="uuid", unique=true) * @ORM\GeneratedValue(strategy="CUSTOM") * @ORM\CustomIdGenerator(class="\Ramsey\Uuid\Doctrine\UuidGenerator") * @OA\Property( * type="string", * format="uuid" * ) */ private $id;
Roman
похоже, надо описать формат uuid
Vlad
@Friendsys Убери с геттера описание доки,
Roman
секунд
Roman
убрал, все то же 🙁
Vlad
это очень странно
Roman
в общем
Roman
написал свой PropertyDescriber
Roman
и заработало
Vlad
написал свой PropertyDescriber
есть ощущение что парсер не видит описание свойства, а ты испортировал аннотацию в сущность ?
Roman
сделал по аналогии с DateTime класс дескрайбера
Roman
class UuidPropertyDescriber implements \Nelmio\ApiDocBundle\PropertyDescriber\PropertyDescriberInterface { use NullablePropertyTrait; /** * @inheritDoc */ public function describe(array $types, Schema $property, array $groups = null) { $property->type = 'string'; $property->format = 'uuid'; $this->setNullableProperty($types[0], $property); } /** * @inheritDoc */ public function supports(array $types): bool { return 1 === count($types) && Type::BUILTIN_TYPE_OBJECT === $types[0]->getBuiltinType() && is_a($types[0]->getClassName(), UuidInterface::class, true); } }
Roman
и в services.yml: App\Utils\UuidPropertyDescriber: tags: [ { name: nelmio_api_doc.object_model.property_describer } ]
Vlad
Ага, спасибо. Поправил, но это не спасло от ошибки
бракую исправление, ток что протестил, работает и ьез jsonContent
Vlad
Roman
теперь мне нужно отдельный контроллер создать под апи и туда набить методов, правильно?
Roman
а как верно? Вот есть у меня админка, хочу туда кидать запросы по api и создавать сущности, к примеру
Vlad
Точнее, подругому отвечу, если у тебя уже есть контроллеры для апи то описывай там
Roman
есть контроллер для администрирования сущности, который crud реализует через формы
Roman
вряд ли он подойдет?
Vlad
вряд ли он подойдет?
Если вы его используете и хротите описать докой то почему нет
Roman
Если вы его используете и хротите описать докой то почему нет
а как мне разделять работу с данными, поступившими через форму и через api? они как минимум в разном формате будут
Roman
или делать отдельные методы для api?
Roman
но тогда дублирование функционала (crud) получается
Roman
а, ну значит верно мыслю )
Vlad
но тогда дублирование функционала (crud) получается
поэтому надо выносить логику из контроллеров
Roman
это новое ) А куда выносить?
Vlad
контроллер отвечает только за принять данные, отвалидировать отправить на обработку и отдать
Roman
мидлвару делать?
Vlad
мидлвару делать?
https://www.youtube.com/watch?v=eU4ajVB9Lz4
Roman
спасибо, погляжу сейчас )
Roman
https://www.youtube.com/watch?v=eU4ajVB9Lz4
То есть, писать логику в Entity, получается, надо? ) То, что с Entity может происходить
Dmitry
То есть, писать логику в Entity, получается, надо? ) То, что с Entity может происходить
Верно. Это и называют ООП. Про это весьма подробно рассказано там в https://elisdn.ru/blog/142/structs-or-objects
Roman
будем образовываться. В общем, логика, которая может происходить с Entity, пишется в Enitty, бизнес логика пишется где-то-между контроллерами и энтити, в контроллерах первичная валидация, редиректы и вызовы бизнес-логики. Звучит приятно, попробуем с этим взлететь )
Shokha
чтобы Psalm так не ругал что надо делать?
Shokha
MissingConstructor я вообще не исползиваю конструктор в этом сущности
Boris
чтобы Psalm так не ругал что надо делать?
Задать значение по умолчанию, или создать конструктор в котором указать поле minPrice
Shokha
значить по правилам нельзя писать так /** * @ORM\Column(name="title", type="string", length=64) */ private string $title;
Shokha
надо private string $title = ''; ?
Boris
надо private string $title = ''; ?
Чтобы psalm не ругался - да
Vlad
чтобы Psalm так не ругал что надо делать?
/** * @psalm-suppress MissingConstructor */ или прописать в конфигах игнор на папку с сущностями или писать нормально)))
Vlad
Писать нормально как я приводил пример выше?
обязательные параметры принимать в конструкторе
Roman
Доброго утра. А почему в Entity может автовайринг не работать? Хочу присобачить сериалайзер, прописал свойство, в конструктор добавил аргумент, в сервисах прописал аргумент - пробую обратиться - получаю Typed property App\Entity\Widget::$serializer must not be accessed before initialization. С другими классами прокатывает, с теми, что в Entity - нет.
Александр
Да
Roman
и правда... Спасибо, вырежу сейчас попробую )
Vlad
и правда... Спасибо, вырежу сейчас попробую )
Чавооо, какой автовайринг у сущности😳
Roman
а как? )
Vlad
а как? )
Какую задачу ты хочешь решить?
Иван
а никак, у сущностей не должно быть сервисов S for SOLID
Иван
у сериализаций контексты шмонтексты, вот это вот всё, сущности про такое знать не положено
Vlad
Всем привет У кого-нибудь есть полный гайд по правильной установке симфони на опенсервер? Например, включая как использовать nginx, а не встроенный сервер symfony и т. д.
Roman
Какую задачу ты хочешь решить?
Хочу запилить объект, как из доклада : ) И чем сущность не объект, с которым можно работать?
Roman
но тогда где создавать этот объект и зачем мне плодить сущности?
Dmitry
но тогда где создавать этот объект и зачем мне плодить сущности?
Сервис-контейнер придуман для сервисов, а не для сущностей. Сущности только хранят и управляют своими данными. Если сущности понадобился какой-то сервис, то передавайте его в метод сущности вроде $entity->method(..., $serializer) и используйте его там налету, а не присваивайте в конструкторе. А так сериалайзер по своему назначению обычно используется выше на уровне контроллера, поэтому обычно ему не место в сущности.
Roman
правда, очень хочется разобраться 🙂
Roman
Да, как в докладе выше
пойду еще раз пересмотрю )
Roman
угу, понял, где ошибся. У меня первая и вторая части доклада спутались :)
Dmitry
пойду еще раз пересмотрю )
Там как раз пять разных контроллеров заполняют одну и ту же команду из формы или сериалайзера. И хэндлер команды как раз инжектит другие сервисы и использует сущность.
Dmitry
да, как раз смотрю
Этот доклад подготовлен по коду моего большого проекта https://youtu.be/j2hvBhxTSuQ
Vlad
пойду еще раз пересмотрю )
на пятый раз картинка сложится )))
Roman
точно )))
Dmitry
да, как раз смотрю
А если интересует связка API с фронтендом, то более современный вариант я использую в новом проекте с 13-го эпизода. С обновлённым кодом всех команд, хэндлеров и сущностей.
Roman
Разные весовые категории https://t.me/oop_ru/151827
Еще такой вопрос (я, конечно, сам проверю, когда до этого дойду) - При такой записи что будет делать Доктрина? Как она определит, что надо создать соответствующие поля в БД? Как определит тип, как прописать Constraint и прочие ништяки?
Roman
а, вижу про ConfirmToken, извиняюсь
Roman
вопрос снят
Roman
только в докладе нет окончания - как все же подружить этот Lot, который весь правильный и созданный в конце Lot, который сущность