Php Symfony Seralizer不';t序列化OneTONE关系/Doctrin代理
我正在尝试序列化一个与图像实体有一对一关系的实体。 当转储实体时,我可以看到图像实体是一个原则代理,并且没有初始化 在尝试访问端点时,它也不会显示在JSON响应中。 我尝试过fetch=“EAGER”,但没有成功 如何将其序列化为“预期响应” 答复:Php Symfony Seralizer不';t序列化OneTONE关系/Doctrin代理,php,symfony,serialization,doctrine,Php,Symfony,Serialization,Doctrine,我正在尝试序列化一个与图像实体有一对一关系的实体。 当转储实体时,我可以看到图像实体是一个原则代理,并且没有初始化 在尝试访问端点时,它也不会显示在JSON响应中。 我尝试过fetch=“EAGER”,但没有成功 如何将其序列化为“预期响应” 答复: [ { "id": 7 } ] [ { "id": 7, "image": { "webView": "
[
{
"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查询,并选择电池和图像实体。这将彻底消除代理,并至少缩小剩余问题的范围。