我使用序列化器组件来反序列化来自json响应的帖子。
$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,您知道我做错了什么吗?
发布于 2020-10-21 18:56:30
我看到你的集线器了。你做得对,但你忘了做两件事:
中创建
以下是工作代码:
$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",
]);但如果你能做好自己的工作你可以:
$posts = $serializer->deserialize($json, Post::class.'[]', 'json', [
DateTimeNormalizer::FORMAT_KEY => "d/m/Y",
]);$serializer是通过Symfony DI创建的。
https://stackoverflow.com/questions/64465390
复制相似问题