首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >转换器创建的Api平台DTO对象未持久化

转换器创建的Api平台DTO对象未持久化
EN

Stack Overflow用户
提问于 2019-03-06 21:11:55
回答 1查看 2.2K关注 0票数 0

在使用Api平台时,我遇到了一个使用输入类及其转换的问题。

已遵循以下文档。https://api-platform.com/docs/core/dto/#using-data-transfer-objects-dtos

在Data Transformer服务执行转换并返回正确类的对象之后,由api-platform拾取的对象看起来是空的,因此它要么验证失败,如果存在验证,要么数据库持久化失败-因为它的字段看起来是空的。

以下是DataTransformer服务方法的简化代码-它生成一个具有硬编码值的对象:

代码语言:javascript
复制
public function transform($object, string $to, array $context = [])
{
    $newCreativeElement = new CreativeElement();
    $newCreativeElement->setKeyName("HARDCODED VALUE");
    $newCreativeElement->setIntValue(42);
    return $newCreativeElement;
}

public function supportsTransformation($object, string $to, array $context = []): bool
{
    if ($object instanceof CreativeElement){
        return false;
    }
    $result = CreativeElement::class === $to && null !== ($context['input']['class'] ?? null);
    return $result;
}
EN

回答 1

Stack Overflow用户

发布于 2019-03-16 14:09:51

编辑: 2.4版本解决了这个问题。升级您的composer.json,尽情享受吧。

我也有同样的问题。我尝试过返回一个数组,而不是一个对象转换方法。这是有效的,但不是真正的解决方案。

看起来去正规化程序被调用了2次:一次是为你的转换器调用的,之后是AbstractItemNormalizer把"CreativeElement“转换成"CreativeElement”

代码语言:javascript
复制
        $context['api_denormalize'] = true;
        $context['resource_class'] = $class;
        $inputClass = $this->getInputClass($class, $context);

        if (null !== $inputClass && null !== $dataTransformer = $this->getDataTransformer($data, $class, $context)) {
            $data = $dataTransformer->transform(
                parent::denormalize($data, $inputClass, $format, ['resource_class' => $inputClass] + $context),
                $class,
                $context
            );
        }

        return parent::denormalize($data, $class, $format, $context);

也在寻找解决方案

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55023945

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档