使用Api平台,我在使用输入类及其转换时遇到问题。
已遵循以下文档。 https://api-platform.com/docs/core/dto/#using-data-transfer-objects-dtos
在Data Transformer服务执行转换并返回正确类的对象之后,由api平台拾取的对象似乎为空,因此它要么无法通过验证(如果存在验证),要么无法持久化数据库-由于其字段似乎为空。
这是DataTransformer服务方法的简化代码-它产生具有硬编码值的对象:
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;
}
答案 0 :(得分:0)
编辑: 由2.4版本解决。 升级您的composer.json并享受。
我有同样的问题。 我尝试过的是返回数组而不是对象转换方法。它正在工作,但不是真正的解决方案。
似乎两次调用了非规范化器:一次用于您的转换器,然后通过AbstractItemNormalizer将“ CreativeElement”转换为“ CreativeElement”
$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);
也在寻找解决方案