首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JMSSerializerBundle -保留关系名称

JMSSerializerBundle -保留关系名称
EN

Stack Overflow用户
提问于 2015-08-26 11:18:30
回答 1查看 270关注 0票数 0

我将Symfony2与JMSSerializerBundle结合使用。最后一个是我新来的=)在这种情况下我该怎么办:

我有图像模型。它包含一些字段,但主要是“名称”。此外,我也有一些模型,这对图像模型有借鉴意义。例如,用户和应用程序。用户模型有OneToOne字段"avatar",应用程序有OneToOne字段“图标”。现在,我想序列化用户实例,并获得以下内容

代码语言:javascript
复制
{
     ...,
     "avatar": "http://example.com/my/image/path/image_name.png",
     ....
}

此外,我还想序列化应用程序,并获得

代码语言:javascript
复制
{
    ...,
    "icon": "http://example.com/my/image/path/another_image_name.png",
    ...
}

我在用户::avatar和Application::图标字段上使用@Inline注释,将Image (与此字段相关)简化为单个标量值(只需要图像“名称”)。此外,我的图像模型有ExclusionPolicy("all"),并且只公开"name“字段。现在,JMSSerializer输出是

代码语言:javascript
复制
(For User instance)
{
    ...,
    "name": "http://example.com/my/image/path/image_name.png",
    ...
}

(For Application instance)
{
    ...,
    "name": "http://example.com/my/image/path/another_image_name.png",
    ...
}

问题是:如何使JMSSerializer在序列化数组中保留"avatar“和”图标“键而不是"name"?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-08-29 06:08:02

最后,我找到了解决办法。在我看来,这不是很优雅和美丽,但它的工作。

  1. 我告诉JMSSerializer,那个用户::阿凡达和应用程序::图标是图像。为此,我使用了注释@Type("Image")。 //src\AppBundle\Entity\User.php //. /** * @var整型**/*** @ORM\JoinColumn(name="avatar",referencedColumnName="id") **@JMS\暴露()*@JMS\Type(“图像”) */ $avatar;//. //src\AppBundle\Entity\Application.php //. /** * @var整型**/***@ORM\JoinColumn(name=“图标”,referencedColumnName="id") * @JMS\Expose() *@JMS\Type(“图像”) */ $icon;//.
  2. 我实现了处理程序,它将具有Image类型的对象序列化为json
  3. 最后一步是注册这个处理程序。我还注入了request服务,以在我的处理程序中生成到图像的完整web路径。 app.image_type_handler:类:AppBundle\序列化器\ImageTypeHandler参数:“@请求”作用域:请求标记:-{ name: jms_serializer.subscribing_handler }

此外,您还可以使用解决方案来修改post_serialize事件中的序列化数据。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32225210

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档