プロパティ内のオブジェクトの配列を逆シリアル化することはSymfony Serializer
で可能ですか? Boss
オブジェクトの配列を保持する必要がある$Npc = []
プロパティを持つNpc
クラスがあります。ドキュメントにいくつかの例を見ましたが、彼らはこの機能を述べていません。 NPCの配列を含むjson文字列があります。例:
class Boss {
private $Npc = [];
/**
* @return Npc[]
*/
public function getNpcs(): array
{
return $this->npcs;
}
}
私はphp7.1とsymfony/serializerバージョン^ 3.3を使用しています。
編集:すでにPhpDocExtractorを試しましたが、インストールできませんでした。 :(
編集:これは可能なJSON値です:
{
"bossname": "Epic boss!",
"npcs": [{
"id": 24723,
"name": "Selin Fireheart",
"urlSlug": "selin-fireheart",
"creatureDisplayId": 22642
}]
}
私はこれを行う方法を見つけました:)。 Composerを使用してSymfony PropertyAccessパッケージをインストールしました。このパッケージでは、アダー、リムーバー、ハッサーを追加できます。このようにして、symfonyシリアライザーは自動的に正しいオブジェクトで配列を埋めます。例:
private $npcs = [];
public function addNpc(Npc $npc): void
{
$this->npcs[] = $npc;
}
public function hasNpcs(): bool
{
return count($this->npcs) > 0
}
等.
このようにして、ObjectNormalizerを以下で使用できます。
$normalizer = new ObjectNormalizer(null, null, null, new ReflectionExtractor());
編集:少なくともv3.4以降、リムーバーメソッドも作成する必要があります。それ以外の場合は機能しません(エラーや警告はありません)。
結果を得ることなく、私はこれに何時間も苦労してきました。加算関数を追加するたびに、objectnormalizerはこの関数を呼び出す必要がありましたが、「フィールドxyzはタイプxyz []、配列が指定されている必要があります」のようなエラーが発生しました。
これが、シリアライザのノーマライザプールにArrayDenormalizer
を追加するのを忘れていた原因です。これを追加した後、すべてがうまくいきました。
これが誰かのために役立つことを願っています。