作为一个简单的例子,我有一个带有以下字段的学说实体
id
name
description
我正在使用JMSSerializerBundle
并且它在大多数情况下运行良好,但是如果我想让序列化数据(Json)包含一些未完全映射到我的实体的内容。
例如,如果我只想返回描述的前50个字符并且我想将其称为short_description
,那该怎么办。
我尝试使用@Expose
排除策略来公开方法,但不支持此方法。
我需要频繁地做这种事情并且有许多不同的实体,我想知道是否有人可以建议一个很好的干净方法。
我已阅读JMSSerializerBundle
的完整文档,并在互联网上寻找解决方案,我可以想出一些解决方案,但结果代码看起来有点脏。
答案 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);
}
}