我有一个标签模型(不是实体),它有一个子标签模型数组属性。
class Tags
{
private array $tags;
public function addTag(Tag $tag): bool{}
public function removeTag(Tag $tag): bool{}
public function setTags(array $tags): self{}
public function getTags(): array{}
而且序列号正确。
{
"tags": [
{
"slug": "a_tag",
"name": "A Tag",
"description": "This is a nice tag!"
}
]
}
为了证明我做的:
use Symfony\Component\PropertyInfo\Extractor\ReflectionExtractor;
use Symfony\Component\Serializer\Encoder\JsonEncode;
use Symfony\Component\Serializer\Encoder\JsonEncoder;
use Symfony\Component\Serializer\Normalizer\ObjectNormalizer;
use Symfony\Component\Serializer\Serializer;
$json = file_get_contents($this->fileName);
$encoders = [new JsonEncoder()];
$normalizers = [new ObjectNormalizer(null, null, null, new ReflectionExtractor())];
$serializer = new Serializer($normalizers, $encoders);
return $serializer->deserialize($json, Tags::class, 'json');
但是当我尝试去验证时,我得到了一个错误:
类“App\Model\Tags”的“tags”属性的类型必须是“App\Model\Tag[]”(给定“array”)之一。
这根本说不通在PHP中不能输入数组,那么为什么它会给出这个错误呢?
我认为这与递归反规范化和类型安全有关,但我不知道如何修复它。
Thanks in advance
2条答案
按热度按时间t3psigkw1#
你需要使用一个ArrayDenormalizer。
at0kjp5o2#
在Symfony yaml config中尝试此配置。
它很适合收藏。