Я получил сериализатор в Symfony, я могу GET и POST json с EntityController. У меня есть форма редактирования, где существующий объект/объект можно редактировать и сохранять. Когда отредактированный объект отправляется (как объект json), объекты json становятся десериализованными, сохраняются и сбрасываются в базу данных. Пока что так хорошо, по крайней мере, до тех пор, пока я не размещаю связанные объекты (ManyToMany).Symfony2 (deserialize): объект обновления (с ассоциацией) с json
У меня есть два объекта (с ассоциацией ManyToMany):
объектов
Элемент
Это работает (см также jsonEditAction в контроллере (размещены ниже)):
{
"id": "1",
"name": "object 1"
}
Мой вопрос: Как я могу редактировать объект с соответствующими субъектами в формате JSON, например:
{
"id": "1",
"name": "object 1",
"elements": {
"0": "1",
"1": "2"
}
}
Когда я выкладываю выше JSON я получаю следующее уведомление от Symfony:
"сообщение": "Ожидаемый аргумент типа \" AppBundle \ Entity \ Элемент \ "\ "целое \" дано", "класс": "Symfony \ Component \ PropertyAccess \ Exception \ InvalidArgumentException",
Для получения дополнительной информации; это editAction где Json размещена на:
public function jsonEditAction(Request $request, $id) {
$serializer = $this->initSerializer();
$em = $this->getDoctrine()->getManager();
$object = $em->getRepository('AppBundle:Object')->findOneById($id);
$data = $request->getContent();
$serializer->deserialize($data, 'AppBundle\Entity\Object', 'json', array('object_to_populate' => $object));
try {
$em->persist($object);
$em->flush();
$view = $this->view($object, 200)
->setTemplate("object/json.html.twig");
} catch (Exception $e) {
$view = $this->view('Caught exception: ' . $e->getMessage() . "\n", 500)
->setTemplate("object/json.html.twig");
}
return $this->handleView($view);
}
private function initSerializer() {
$encoders = array(new JsonEncoder());
$normalizers = array(new ObjectNormalizer());
$serializer = new Serializer($normalizers, $encoders);
return $serializer;
} `
Должен ли я ходить в массив с элементами и найти их один за другим, а затем добавить их в «объект» лица? Или есть «встроенное» решение в сериализаторе, которое я пропустил/не видел?
UPDATE: также JSON, как предложил Алексей не работал:
{
"id": 2,
"name": "Object 2c",
"elements": [{
"id": 1
}, {
"id": 2
}]
}
UPDATE: Мой вопрос является дубликатом: Deserialize an entity with a relationship with Symfony Serializer Component Существует запрос выдвижная создан и будут объединены в Symfony 3.2 ...
Может быть, вы ищете Symfony [Data transformer] (http://symfony.com/doc/current/form/data_transformers.html) – Jeet
Но до тех пор, как сериализатор, он должен обрабатывать трансформатор неявно, я использовал [JMSSerializer] (https://github.com/schmittjoh/JMSSerializerBundle) с [FOSRestBundle] (http: // symfony.ком/док/ток/пучки/FOSRestBundle/index.html). Но я никогда не сталкивался с такой проблемой. Это потому, что даже данные были отправлены в чистом JSON, я всегда использовал тип формы для обработки данных сообщения. – Jeet
@Jeet: Можете ли вы показать мне пример вашего обработчика? –