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