Вы можете сериализовать данные json с вашего контроллера непосредственно в Symfony, если у вас установлен компонент Serializer .
$user = $this->get('serializer')->deserialize($data, 'AppBundle\Entity\User', 'json');
Когда ваш объект создается с помощью этого метода, используя json из вашего запроса (декодированный и затем денормализованный), сеттеры вашего объекта используются для заполнения свойств вашего объекта.
Не могли бы вы опубликовать свой пользовательский объект?
В качестве альтернативы вы можете использовать Классы форм для выполнения этой задачи.
Модификация по отношению к комментарию на ваш вопрос.
Группы аннотаций в ваших сущностях работают для сериализации и десериализации.
class Item
{
/**
* @ORM\Id
* @ORM\GeneratedValue
* @ORM\Column(type="integer")
* @Groups({"first", "second"})
*/
private $id;
/**
* @ORM\Column(type="string", name="name", length=100)
* @Groups({"first"})
*/
private $name;
/**
* @ORM\Column(type="string", name="name", length=200)
* @Groups({"second"})
*/
private $description;
public function getId()
{
return $this->id;
}
public function getName()
{
return $this->name;
}
public function setName($name)
{
$this->name = $name;
}
public function getDescription()
{
return $this->description;
}
public function setDescription($description)
{
$this->description = $description;
}
}
Если у вас в именах POST есть и «имя», и «описание», вы можете вставить в вашу сущность следующее:
$object = $this->get('serializer')->deserialize($data, 'AppBundle\Entity\User', 'json', ['groups' => ['first']]);
Или
$object = $this->get('serializer')->deserialize($data, 'AppBundle\Entity\User', 'json', ['groups' => ['second']]);
В первом случае заполняется только свойство name, а во втором случае только свойство description.