Я разрабатываю API сообщений, и я установил метод PUT /message
.Как получить связанные объекты для объекта?
Полезная нагрузка состоит из массива, содержащего три поля: message
, sender
и receiver
- первый из них является само сообщение и следующие поля являются каждый представление пользователя. Полезная нагрузка может быть что-то вроде:
{
"message": "Hi!",
"sender": { "id": 1 },
"receiver": { "id", 2 }
}
Используя JMSSerializerBundle
, я мог бы успешно перевести полезную нагрузку в Message
субъекта и его пользователей в их соответствующих User
лиц. Это Message
лицо:
/**
* @ORM\Entity
*/
class Message
{
/**
* @ORM\Column(type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
/**
* @ORM\ManyToOne(targetEntity="User")
* @ORM\JoinColumn(name="sender", referencedColumnName="id", nullable=false)
*/
protected $sender;
/**
* @ORM\ManyToOne(targetEntity="User")
* @ORM\JoinColumn(name="receiver", referencedColumnName="id", nullable=false)
*/
protected $receiver;
}
То, что я хочу сделать, чтобы иметь возможность получить полезную нагрузку, а затем сохраняются в базе данных. Не больше, не меньше. Контроллер выглядит следующим образом:
/**
* @Configuration\Method("PUT")
* @Configuration\Route("/message")
*/
public function putMessageAction(Request $request)
{
/** @var Message $message */
$message = $this
->getJMSSerializer()
->deserialize($request->getContent(), 'Message', 'json');
// at this point I want both sender and receiver to be two database users
if ($message->getSender()->getId() === $message->getReceiver()->getId()) {
throw new \Exception("A message's sender and receiver cannot be the same people.");
}
$em = $this->getDoctrine()->getManager();
$em->persist($message);
$em->flush();
return JsonResponse::create([
'message' => 'Message successfully received.'
], 200);
}
Я сократил пространства имен, чтобы сосредоточиться на самой проблеме. Нечего беспокоиться об этом. :)
И можем ли мы предположить, что он не работает? У вас есть JMSSerializerBundle, сконфигурированный для фактического вытягивания существующих сущностей отправителя/получателя из базы данных? – Cerad
@Cerad да, это не работает. Когда я получаю сообщение, оба приемника и отправителя пусты, поэтому я не могу просто сохранить сообщение сразу. Я не знаю, что делать для JMSSerializer, чтобы принести мне связанные объекты. У вас есть какие-то намеки? – rodrigorigotti
Я могу показать вам, как это сделать без JMSSerializer, если хотите. Я обнаружил, что пучки были несколько сконструированы и запутаны, поэтому я прекратил использовать его. В противном случае, загляните в документацию или дождитесь, когда кто-то, кто знаком с комплектом, остановится. – Cerad