首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >属性"publishedAt“值的去denormalize失败

属性"publishedAt“值的去denormalize失败
EN

Stack Overflow用户
提问于 2020-10-21 14:07:59
回答 1查看 1.9K关注 0票数 2

我使用序列化器组件来反序列化来自json响应的帖子。

代码语言:javascript
复制
        $data = <<<EOF
        {
            "header": {
            "error": 0,
            "message": "ok",
            "next": 2
            },
            "results": [
            {
            "id": 17007,
            "title": "test article title 1",
            "publishedAt": "28/09/2020"
            },
            {
            "id": 17008,
            "title": "sample article 2",
            "publishedAt": "28/09/2020"
            }
            ]
        }
        EOF;
        $json = json_encode(json_decode($data)->results);
        $normalizers = array(new ObjectNormalizer(),new  GetSetMethodNormalizer(), new ArrayDenormalizer());
        $encoders = array(new JsonEncoder());
        $serializer = new Serializer($normalizers, $encoders);
        $posts = $serializer->deserialize($json, Post::class . '[]', 'json');
dd($posts); exit;

我明白这一例外:

未能对类“App\Entity\Post”的属性"publishedAt“值进行去denormalize :类型为"DateTime”、"string“在属性路径"publishedAt”中的预期参数。

我创建了这个简单的项目,向您展示我的代码,https://github.com/ferrassi/sfDevs,您知道我做错了什么吗?

EN

回答 1

Stack Overflow用户

发布于 2020-10-21 18:56:30

我看到你的集线器了。你做得对,但你忘了做两件事:

  1. 将提取器传递给ObjectNormalizer,让他对标量以外的其他类型进行去甲基化。注意新ReflectionExtractor()
  2. 下面的代码中,将$context传递给DatetimeNormalizer,具有正确的日期格式,让他从您的格式

中创建

以下是工作代码:

代码语言:javascript
复制
        $normalizers = array(
            new DateTimeNormalizer([
                DateTimeNormalizer::FORMAT_KEY => "d/m/Y",
            ]),
            new ObjectNormalizer(
                null,
                null,
                null,
                new ReflectionExtractor()
            ),
            new GetSetMethodNormalizer(),
            new ArrayDenormalizer(),
        );
        $encoders = array(new JsonEncoder());

        $serializer = new Serializer($normalizers, $encoders);
        $posts = $serializer->deserialize($json, Post::class.'[]', 'json', [
            DateTimeNormalizer::FORMAT_KEY => "d/m/Y",
        ]);

但如果你能做好自己的工作你可以:

代码语言:javascript
复制
$posts = $serializer->deserialize($json, Post::class.'[]', 'json', [
    DateTimeNormalizer::FORMAT_KEY => "d/m/Y",
]);

$serializer是通过Symfony DI创建的。

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

https://stackoverflow.com/questions/64465390

复制
相关文章

相似问题

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