使用带有 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 的问题

Nelmio API 文档区域和带有 symfony 4 的不记名令牌

API 平台:具有默认 WHERE 子句的实体

symfony + api 平台 - 为路由创建别名

CSRF 和 RESTful API (symfony2, php)