如何公开方法或类似的替代方案

时间:2014-05-07 17:03:53

标签: rest symfony jms jmsserializerbundle

作为一个简单的例子,我有一个带有以下字段的学说实体

id
name
description

我正在使用JMSSerializerBundle并且它在大多数情况下运行良好,但是如果我想让序列化数据(Json)包含一些未完全映射到我的实体的内容。

例如,如果我只想返回描述的前50个字符并且我想将其称为short_description,那该怎么办。

我尝试使用@Expose排除策略来公开方法,但不支持此方法。

我需要频繁地做这种事情并且有许多不同的实体,我想知道是否有人可以建议一个很好的干净方法。

我已阅读JMSSerializerBundle的完整文档,并在互联网上寻找解决方案,我可以想出一些解决方案,但结果代码看起来有点脏。

1 个答案:

答案 0 :(得分:3)

注释@VirtualProperty正是您所寻找的(http://jmsyst.com/libs/serializer/master/reference/annotations#virtualproperty)。

例如:

namespace Some\Bundle\Entity;

use JMS\Serializer\Annotation\VirtualProperty;
use JMS\Serializer\Annotation\SerializedName;

class MyEntity
{
     private $description;

     /**
      * @VirtualProperty
      * @SerializedName("short_description")
      */
     public function getShortDescription()
     {
         return substr($this->description, 0, 50);
     }
}