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
и заработало
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
Roman
теперь мне нужно отдельный контроллер создать под апи и туда набить методов, правильно?
Vlad
Roman
а как верно? Вот есть у меня админка, хочу туда кидать запросы по api и создавать сущности, к примеру
Vlad
Точнее, подругому отвечу, если у тебя уже есть контроллеры для апи то описывай там
Roman
есть контроллер для администрирования сущности, который crud реализует через формы
Roman
вряд ли он подойдет?
Roman
или делать отдельные методы для api?
Roman
но тогда дублирование функционала (crud) получается
Vlad
Roman
а, ну значит верно мыслю )
Vlad
Roman
это новое ) А куда выносить?
Vlad
контроллер отвечает только за принять данные, отвалидировать отправить на обработку и отдать
Roman
мидлвару делать?
Roman
спасибо, погляжу сейчас )
Roman
будем образовываться. В общем, логика, которая может происходить с Entity, пишется в Enitty, бизнес логика пишется где-то-между контроллерами и энтити, в контроллерах первичная валидация, редиректы и вызовы бизнес-логики. Звучит приятно, попробуем с этим взлететь )
Shokha
чтобы Psalm так не ругал что надо делать?
Shokha
MissingConstructor я вообще не исползиваю конструктор в этом сущности
Shokha
значить по правилам нельзя писать так
/**
* @ORM\Column(name="title", type="string", length=64)
*/
private string $title;
Shokha
надо private string $title = ''; ?
Boris
Shokha
Shokha
Roman
Доброго утра. А почему в Entity может автовайринг не работать? Хочу присобачить сериалайзер, прописал свойство, в конструктор добавил аргумент, в сервисах прописал аргумент - пробую обратиться - получаю Typed property App\Entity\Widget::$serializer must not be accessed before initialization. С другими классами прокатывает, с теми, что в Entity - нет.
Александр
Roman
Александр
Да
Roman
и правда... Спасибо, вырежу сейчас попробую )
Roman
а как? )
Vlad
а как? )
Какую задачу ты хочешь решить?
Иван
а никак, у сущностей не должно быть сервисов
S for SOLID
Иван
у сериализаций контексты шмонтексты, вот это вот всё, сущности про такое знать не положено
Vlad
Всем привет
У кого-нибудь есть полный гайд по правильной установке симфони на опенсервер? Например, включая как использовать nginx, а не встроенный сервер symfony и т. д.
Roman
Roman
но тогда где создавать этот объект и зачем мне плодить сущности?
Юра
Dmitry
но тогда где создавать этот объект и зачем мне плодить сущности?
Сервис-контейнер придуман для сервисов, а не для сущностей. Сущности только хранят и управляют своими данными.
Если сущности понадобился какой-то сервис, то передавайте его в метод сущности вроде $entity->method(..., $serializer) и используйте его там налету, а не присваивайте в конструкторе.
А так сериалайзер по своему назначению обычно используется выше на уровне контроллера, поэтому обычно ему не место в сущности.
Roman
Roman
правда, очень хочется разобраться 🙂
Dmitry
Roman
угу, понял, где ошибся. У меня первая и вторая части доклада спутались :)
Dmitry
пойду еще раз пересмотрю )
Там как раз пять разных контроллеров заполняют одну и ту же команду из формы или сериалайзера. И хэндлер команды как раз инжектит другие сервисы и использует сущность.
Roman
Dmitry
да, как раз смотрю
Этот доклад подготовлен по коду моего большого проекта https://youtu.be/j2hvBhxTSuQ
Roman
точно )))
Dmitry
да, как раз смотрю
А если интересует связка API с фронтендом, то более современный вариант я использую в новом проекте с 13-го эпизода. С обновлённым кодом всех команд, хэндлеров и сущностей.
Roman
Dmitry
Roman
Разные весовые категории
https://t.me/oop_ru/151827
Еще такой вопрос (я, конечно, сам проверю, когда до этого дойду) - При такой записи что будет делать Доктрина? Как она определит, что надо создать соответствующие поля в БД? Как определит тип, как прописать Constraint и прочие ништяки?
Roman
а, вижу про ConfirmToken, извиняюсь
Roman
вопрос снят
Roman
только в докладе нет окончания - как все же подружить этот Lot, который весь правильный и созданный в конце Lot, который сущность
Vlad