Php Symfony Seralizer不';t序列化OneTONE关系/Doctrin代理

Php Symfony Seralizer不';t序列化OneTONE关系/Doctrin代理,php,symfony,serialization,doctrine,Php,Symfony,Serialization,Doctrine,我正在尝试序列化一个与图像实体有一对一关系的实体。 当转储实体时,我可以看到图像实体是一个原则代理,并且没有初始化 在尝试访问端点时,它也不会显示在JSON响应中。 我尝试过fetch=“EAGER”,但没有成功 如何将其序列化为“预期响应” 答复: [ { "id": 7 } ] [ { "id": 7, "image": { "webView": "

我正在尝试序列化一个与图像实体有一对一关系的实体。 当转储实体时,我可以看到图像实体是一个原则代理,并且没有初始化

在尝试访问端点时,它也不会显示在JSON响应中。 我尝试过fetch=“EAGER”,但没有成功

如何将其序列化为“预期响应”

答复:

[
  {
    "id": 7
  }
]
[
  {
    "id": 7,
    "image": {
        "webView": "someUrl"
    }
  }
]
预期答复:

[
  {
    "id": 7,
    "image": {
        "webView": "someUrl"
    }
  }
]
实体:

/**
*@ORM\Entity(repositoryClass=BatteryTypeRepository::class)
*/
类别电池类型
{
/**
*@ORM\Id()
*@ORM\GeneratedValue()
*@ORM\Column(type=“integer”)
*
*@Groups({“type”})
*/
私人$id;
/**
*@ORM\OneToOne(targetEntity=Image::class,cascade={“persist”,“remove”})
*
*@Groups({“type”})
*/
私人图像;
/**
*@返回图像|空
*/
公共函数getImage():?图像
{
返回$this->image;
}
公共函数setImage(?Image$Image):self
{
$this->image=$image;
退还$this;
}
}
图像实体:

/**
 * @ORM\Entity(repositoryClass=ImageRepository::class)
 * @ORM\EntityListeners({"App\EventSubscriber\ImageListener"})
 */
class Image
{
    /**
     * @ORM\Id()
     * @ORM\GeneratedValue()
     * @ORM\Column(type="integer")
     * @Groups({"type"})
     */
    private $id;

    /**
     * @ORM\Column(type="string", length=255)
     */
    private $filename;

    /**
     * Auto generated by entity listener
     * @var string
     */
    private $tempFilename;

    /**
     * @var File
     * @Assert\Image()
     * @Assert\NotBlank()
     */
    private $file;

    /**
     * @var string
     * @Groups({"type"})
     */
    private $webView;

    /** Getters & Setters */
}
ImageListener:

类ImageListener
{
/**
*@var S3FileManagerInterface
*/
私有S3FileManager接口$fileManager;
公共函数构造(S3FileManager接口$fileManager)
{
$this->fileManager=$fileManager;
}
公共函数后加载(Image$Image,LifecycleEventArgs$args):无效
{
$image->setWebView(
$this->fileManager->getUrl($image->getFilename())
);
如果(!$image->getTempFilename()){
$image->settmpfilename($image->getFilename());
}
}
}
控制器:

公共函数getBatteryTypes(BatteryTypeRepository$BatteryTypeRepository):响应
{
$batteryTypes=$batteryTypeRepository->findAll();
$view=$this->view($batteryTypes,Response::HTTP\u OK);
$view->getContext()->setGroups([“type”]);
返回$this->handleView($view);
}

在您的
图像
实体中,您必须为
网络视图
属性添加
@Groups({“type”})
注释。

我的问题显然是缓存相关的

我用图像实体源调整了我的帖子
图像
中正确导入了注释吗?(只是想消除这种可能性)考虑创建一个DQL查询,并选择电池和图像实体。这将彻底消除代理,并至少缩小剩余问题的范围。