在Symfony 4中使用嵌套的DateTime对象将json反序列化为实体

时间:2019-03-28 03:14:51

标签: symfony symfony4

我有一个实体,其中包含一个名为DateTimeInterface的{​​{1}}类型的字段,并且我想对该对象对象反序列化JSON对象。

我尝试了completedAtDateTimeNormalizer,但是它们都给我一个错误,提示我无法将字符串/数组分配给DateTime对象。

例如,我有这个实体,

ObjectNormalizer

以及如何使用PHPUnit在测试中创建JSON对象,

class Task
{
    private $id;
    private $name;

    /**
     * @var DateTimeInterface
     */
    private $completedAt;
}

在我的控制器中,我尝试了此操作(这是一个测试,而不是我的真实代码):

$rawData = json_encode([
    'name' => 'test-task',
    'completedAt' => Carbon::now()->toRfc3339String(),
    // I tried some other formats here, such as datetime array, datetime string, etc.
]);

我收到了这个错误,

  

NotNormalizableValueException   在属性路径“ completedAt”处给出的预期类型为“ DateTimeInterface”,“ string”的参数。

如何使用多个规范化器反序列化JSON对象?

2 个答案:

答案 0 :(得分:1)

如果您希望将json数据转换为创建的实体,则可以使用symfony serialzer

$serializer = new Serializer([new ObjectNormalizer()]); // array of needed normalizer
$serializer->denormalise($json_data,YourEntity::class);

应该可以正常工作

https://symfony.com/doc/current/components/serializer.html

答案 1 :(得分:0)