使用带有 api 平台和 symfony 的转换器时,GET 结果为空
Posted
技术标签:
【中文标题】使用带有 api 平台和 symfony 的转换器时,GET 结果为空【英文标题】:GET result empty when using transformer with api platform and symfony 【发布时间】:2021-10-31 08:20:38 【问题描述】:我在 symfony (4) 中使用 api 平台并且没有使用转换器(或者更确切地说:没有使用输出属性)我得到了正确的结果。 但是,由于我需要转换徽标(添加路径),因此我需要集成一个转换器。结果响应为空。
Entity中的ApiResource定义:
/**
*
* @ApiResource(
* collectionOperations =
* "get"
* ,
* normalizationContext="groups" = "frontend:read",
* itemOperations=
"get"
* ,
* order="name"="ASC",
* paginationEnabled=false,
* output=EntityApiOutput::class
* )
*/
EntityApi输出:
class EntityApiOutput
public $id;
EntityApiOutputDataTransformer:
class EntityApiOutputDataTransformer implements DataTransformerInterface
/**
* @inheritdoc
*/
public function transform($object, string $to, array $context = [])
$eao = new EntityApiOutput();
$eao->id = 3;
return $eao;
public function supportsTransformation($data, string $to, array $context = []): bool
return EntityApiOutput::class === $to && $data instanceof Entity;
services.yaml 中的条目:
App\DataTransformer\EntityApiOutputDataTransformer:
tags:
- name: api_platform.data_transformer
为了便于阅读,我简化了转换器。
放一个
dump($eao)
exit;
进入transform方法确认调用了transformer并填充了EntityApiOutput对象。
【问题讨论】:
如果你使用 -> normalizationContext="groups" = "frontend:read" 你必须写关于你想要在结果中获得的属性的组 【参考方案1】:Mhm 不幸的是,api 平台文档忘记提及也将组放入输出类:
class EntityApiOutput
/*
*
* @Groups("frontend:read")
*/
public $id;
它应该是这样的。
【讨论】:
以上是关于使用带有 api 平台和 symfony 的转换器时,GET 结果为空的主要内容,如果未能解决你的问题,请参考以下文章
Symfony 4 API 平台和 JWT:如何使用 Symfony 客户端项目登录 API?
CORS..Angular 和 API 平台 Symfony 的问题