SF3 の新機能として、API Platform と Sonata Media Bundle を使用しています。
API Platform GET リクエストを使用して Sonata の Gallery エンティティを取得中にブロックされました。
"A circular reference has been detected when serializing the object of class \"Application\\Sonata\\MediaBundle\\Entity\\Gallery\" (configured limit: 1)"
エンティティの管理者はうまく機能します。エンティティにギャラリーを追加できます。エンティティにギャラリーがある場合、このエラーが発生しますが、そうでない場合は問題ありません。
Entity Technic GET /technics in API Platform
[
{
"id": 0,
"type": "string",
"comment": "string",
"links": [
"string"
],
"gallery": "string"
}
]
エンティティ クラス
<?php
// src/AppBundle/Entity/Technic.php
namespace AppBundle\Entity;
use ApiPlatform\Core\Annotation\ApiResource;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;
use Symfony\Component\Serializer\Annotation\Groups;
/**
* @ORM\Entity
* @ApiResource
*/
class Technic
{
/**
* @var int The id of this evaluation.
*
* @ORM\Column(type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
public $id;
/**
* @var string $type TechnicType of the evaluation
*
* @ORM\OneToOne(targetEntity="TechnicType")
* @Assert\NotBlank
*/
public $type;
/**
* @var string $note Note of the evaluation
*
* @ORM\Column(type="string", length=255, nullable=true)
*/
public $comment;
/**
* @var Link[] Link Links of this technic.
*
* @ORM\ManyToMany(targetEntity="Link", cascade={"persist"})
*/
private $links;
/**
* @ORM\OneToOne(targetEntity="Application\Sonata\MediaBundle\Entity\Gallery",cascade={"persist"})
* @ORM\JoinColumn(name="gallery", referencedColumnName="id", nullable=true)
*/
private $gallery;
/**
* Constructor
*/
public function __construct()
{
$this->links = new \Doctrine\Common\Collections\ArrayCollection();
}
/**
* Get id
*
* @return integer
*/
public function getId()
{
return $this->id;
}
/**
* Set type
*
* @param \AppBundle\Entity\TechnicType $type
*
* @return Technic
*/
public function setType(\AppBundle\Entity\TechnicType $type = null)
{
$this->type = $type;
return $this;
}
/**
* Get type
*
* @return \AppBundle\Entity\TechnicType
*/
public function getType()
{
return $this->type;
}
/**
* Add link
*
* @param \AppBundle\Entity\Link $link
*
* @return Technic
*/
public function addLink(\AppBundle\Entity\Link $link)
{
$this->links[] = $link;
return $this;
}
/**
* Remove link
*
* @param \AppBundle\Entity\Link $link
*/
public function removeLink(\AppBundle\Entity\Link $link)
{
$this->links->removeElement($link);
}
/**
* Get links
*
* @return \Doctrine\Common\Collections\Collection
*/
public function getLinks()
{
return $this->links;
}
/**
* Set comment
*
* @param string $comment
*
* @return Technic
*/
public function setComment($comment)
{
$this->comment = $comment;
return $this;
}
/**
* Get comment
*
* @return string
*/
public function getComment()
{
return $this->comment;
}
/**
* Set gallery
*
* @param \Application\Sonata\MediaBundle\Entity\Gallery $gallery
*
* @return Technic
*/
public function setGallery(\Application\Sonata\MediaBundle\Entity\Gallery $gallery = null)
{
$this->gallery = $gallery;
return $this;
}
/**
* Get gallery
*
* @return \Application\Sonata\MediaBundle\Entity\Gallery
*/
public function getGallery()
{
return $this->gallery;
}
}
どうもありがとう、私は絶望的です。私は StackQ/A、注釈、seraliazer config で多くのことを試しています...