如何解决返回 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 举报,一经查实,本站将立刻删除。