微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

返回 API 平台中的字符串数组

如何解决返回 API 平台中的字符串数组

我是 API 平台的新手,正在尝试克隆现有的 API。我有一个实体 Tag,它具有一个 id 和一个名称属性/api/tags认行为是返回一个对象数组。类似的东西:

[
  {
    "id": 1,"name": "tag1"
  },{
    "id": 2,"name": "tag2"
  }
]

我真正想要的只是一个简单的字符串数组:

[
    "tag1","tag2"
]

从文档来看,我好像需要注册一个数据转换器:

final class TagOutputTransformer implements DataTransformerInterface
{
    /**
     * {@inheritdoc}
     */
    public function transform($data,string $to,array $context = [])
    {
        return $data->name;
    }

    /**
     * {@inheritdoc}
     */
    public function supportsTransformation($data,array $context = []): bool
    {
        return $data instanceof Tag;
    }
}

services.yaml:

services:
   
    'App\DataTransformer\TagOutputTransformer': ~

并注释我的实体:

/**
 * @ApiResource(
 *     collectionoperations={
 *         "get"={
 *             "method"="GET",*              "output"="string"
 *         }
 *     }
 * )
 * @ORM\Entity(repositoryClass=TagRepository::class)
 */

问题是将 string 放在注释中是无效的。我得到 Class string does not exist。如果我删除引号,我会得到 Couldn't find constant string

这是正确的方法吗?我做错了什么?

解决方法

通过指定 "output"="string",您告诉 API 平台将您的 Tag 资源转换到一个 string 实例以进行输出。但是,string 不是类,无法实例化(或转换为)。

您想要的是告诉 API 平台将 Tag 转换为一个 represents your desired data representation 的对象。

例如,实现自定义 TagCollectionOutput 类(保存 Tag 名称数组)并将 "output"=TagCollectionOutput::class 添加到 Tag。然后让 TagOutputTransformer transform $data 变成一个 TagCollectionOutput 实例。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。