在使用Api平台时,我遇到了一个使用输入类及其转换的问题。
已遵循以下文档。https://api-platform.com/docs/core/dto/#using-data-transfer-objects-dtos
在Data Transformer服务执行转换并返回正确类的对象之后,由api-platform拾取的对象看起来是空的,因此它要么验证失败,如果存在验证,要么数据库持久化失败-因为它的字段看起来是空的。
以下是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;
}发布于 2019-03-16 14:09:51
编辑: 2.4版本解决了这个问题。升级您的composer.json,尽情享受吧。
我也有同样的问题。我尝试过返回一个数组,而不是一个对象转换方法。这是有效的,但不是真正的解决方案。
看起来去正规化程序被调用了2次:一次是为你的转换器调用的,之后是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);也在寻找解决方案
https://stackoverflow.com/questions/55023945
复制相似问题