1

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 で多くのことを試しています...

4

1 に答える 1