我正在尝试使用symfony序列化程序组件反序列化具有关系的实体。这是我的实体:
namespace AppBundle\Entity; use Doctrine\ORM\Mapping as ORM; /** * Document * * @ORM\Table(name="document") * @ORM\Entity(repositoryClass="AppBundle\Repository\DocumentRepository") */ class Document { /** * @var int * * @ORM\Column(name="id", type="integer") * @ORM\Id * @ORM\GeneratedValue(strategy="AUTO") */ private $id; /** * @ORM\ManyToOne(targetEntity="Genre", inversedBy="documents") * @ORM\JoinColumn(name="id_genre", referencedColumnName="id") */ private $genre; /** * @var string * * @ORM\Column(name="name", type="string", length=100) */ private $name; //getters and setters down here ... }
和 流派实体 :
namespace AppBundle\Entity; use Doctrine\ORM\Mapping as ORM; use Doctrine\Common\Collections\ArrayCollection; /** * Genre * * @ORM\Table(name="genre") * @ORM\Entity(repositoryClass="AppBundle\Repository\GenreRepository") */ class Genre { /** * @var int * * @ORM\Column(name="id", type="integer") * @ORM\Id * @ORM\GeneratedValue(strategy="AUTO") */ private $id; /** * @var string * * @ORM\Column(name="name", type="string", length=50, nullable=true) */ private $name; /** * @ORM\OneToMany(targetEntity="Document", mappedBy="genre") */ private $documents; public function __construct() { $this->documents= new ArrayCollection(); } //getters and setters down here .... }
现在在我的 控制器操作中, 我正在尝试以下操作:
$encoders = array(new JsonEncoder()); $normalizers = array(new ObjectNormalizer()); $serializer = new Serializer($normalizers, $encoders); $document = $serializer->deserialize($request->getContent(), 'AppBundle\Entity\Document', 'json');
还有我的 json数据 :
{"name": "My document", "genre": {"id": 1, "name": "My genre"}}
但是我得到了下一个 错误 :
给定类型为“ AppBundle \ Entity \ Genre”,“ array”的预期参数(500内部服务器错误)
是否可以使用内部具有关系的实体反序列化json请求?
感谢您的放心。
是的,没有。首先,您不应该在控制器中重新创建序列化程序的新实例,而应使用serializer服务。
serializer
其次,不,Symfony序列化程序不可能立即可用。我们正在https://api-platform.com/中进行此操作,但其中存在一些魔术。就是说,已经建立了PR来支持它:https : //github.com/symfony/symfony/pull/19277