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

Sam*_*ony 2 rest jms symfony jmsserializerbundle

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

id
name
description
Run Code Online (Sandbox Code Playgroud)

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

例如,如果我只想返回描述的前 50 个字符并且我想将其称为short_description.

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

我需要经常与许多不同的实体一起做这种事情,我想知道是否有人可以提出一个很好的干净的方法来解决这个问题。

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

Gen*_*liu 5

注释@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);
     }
}
Run Code Online (Sandbox Code Playgroud)