在Api Platform中覆盖属性名称

时间:2019-03-01 19:22:55

标签: api-platform.com

好的,所以我有以下用例。在某些实体上,我使用带有组织徽标的文件实体。

现在,我希望用户发布一个链接(然后我将异步获取文件)或该文件的base64。但是,当用户执行get操作时,我想呈现文件实体的JSON表示形式(还包括大小,缩略图链接等)。

我当前拥有的设置是实体上的两个不同属性,一个用于读取,另一个用于使用不同逻辑进行发布。然后是事件监听器处理逻辑。一切都很好,但是它导致用户在其json文件中发布postLogo属性,我希望他们在其json文件中发布至logo属性。

是否可以使用注释(例如ApiProperty上的名称)来实现此目的?还是需要覆盖序列化程序?

/**
 * @var File The logo of this organisation
 *
 * @ORM\ManyToOne(targetEntity="File")
 * @ApiProperty(
 *     attributes={
 *         "openapi_context"={
 *             "type"="#/components/schemas/File"
 *         }
 *     }
 * )
 * @Groups({"read"})
 */
public $logo;

/**
 * @var string The logo of this organisation, a logo can iether be posted as a valid url to that logo or a base64 reprecentation of that logo.
 *
 * @ApiProperty(
 *  attributes={
 *      "openapi_context"={
 *          "type"="url or base64"
 *      }
 *  }
 * )
 * @Groups({"write"})
 */
public $postLogo;

1 个答案:

答案 0 :(得分:0)

您可以添加带有Seri​​alizedName批注的设置器。这样的事情应该起作用

/**
     * @Groups({"write"})
     * @SerializedName("logo")
     * 
     */
    public function setPostLogo($value)
    {
       $this->postLogo = $value;
    }