Использование DTO и получение подресурса ORM с помощью uriVariable в API Platform/SymfonyPhp

Кемеровские программисты php общаются здесь
Ответить
Гость
 Использование DTO и получение подресурса ORM с помощью uriVariable в API Platform/Symfony

Сообщение Гость »


Я использую платформу API 3 с Symfony 6 для создания API. У меня есть подписчик объекта ORM. Чтобы изменить определенные поля подписчика, я хочу использовать PUT с объектом передачи данных (DTO). Поскольку мне нужен базовый подписчик и я хочу, чтобы платформа API проверяла, существует ли этот подписчик (и возвращала 404, если это не так), и автоматически извлекала его (для использования в StateProcessor), я пытаюсь передать идентификатор подписчика в URL как uriVariable (в URI он называется subscriberId, но фактический идентификатор в Subscriber — это просто id).

Однако это всегда возвращает 404, предположительно потому, что он пытается получить объект SaveSubscriberDetails DTO с идентификатором подписчика, который не может работать, поскольку это не объект ORM, который где-либо сохраняется. Маршрут API существует. Когда я удаляю uriVariable в конфигурации ApiResource, я достигаю процессора состояния (проверено отладкой). Когда я оставляю его включенным, я никогда не дохожу до процессора состояний. Подписчик с идентификатором, который я передаю в URL-адресе, существует.

Моя попытка:

#[ApiResource( uriTemplate: '/subscriber/{subscriberId}/saveDetails', операции: [ новый Put (вход: SaveSubscriberDetails::class, процессор: SaveSubscriberDetailsProcessor::class), ], uriVariables: [ 'subscriberId' => новая ссылка( fromProperty: 'id', fromClass: Подписчик::класс ), ], вывод: SaveSubscriberDetails::class )] Я делаю что-то принципиально неправильное?
[*]Может быть, я неправильно использую атрибут «Ссылка»? [*]Нужно ли мне добавлять идентификатор частного свойства subscriberId типа int или подписчика свойства типа Subscriber в мой DTO SaveSubscriberDetails, чтобы ссылаться на него? [*]Может быть, мне нужно настроить процесс десериализации, в результате которого создается объект SaveSubscriberDetails? [*]Могу/должен ли я просто передать uriVariable subscriberId и сказать ему вообще не интерпретировать его, а вместо этого просто получить базовый объект Subscriber из базы данных в процессоре состояния SaveSubscriberDetailsProcessor?
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»