Код: Выделить всё
class Reseller {
private ?Uuid $id;
private string $name;
private ContactInfo $contactInfo;
}
class ContactInfo {
private ?Uuid $id;
private string $defaultEmail;
}
Код: Выделить всё
{"name":"Changed name","contactInfo":{"defaultEmail":"changed@contact.com"}}
Когда для параметра AbstractObjectNormalizer::DEEP_OBJECT_TO_POPULATE установлено значение true, существующие дочерние элементы корневого OBJECT_TO_POPULATE обновляются на основе нормализованных данных вместо того, чтобы денормализатор создавал их заново. Обратите внимание, что DEEP_OBJECT_TO_POPULATE работает только для отдельных дочерних объектов, но не для массивов объектов. Они все равно будут заменены, если они присутствуют в нормализованных данных.
Поэтому я сделал это своим сериализатором:
Код: Выделить всё
return $serializer->deserialize(
$jsonString,
Reseller::class,
'json',
[
AbstractObjectNormalizer::DEEP_OBJECT_TO_POPULATE => true,
AbstractNormalizer::OBJECT_TO_POPULATE => $reseller,
AbstractNormalizer::GROUPS => $groups,
]
);
App\Entity\Reseller::setContactInfo(): Аргумент №1 ( $contactInfo) должен иметь тип App\Entity\ContactInfo, заданный массив, вызываемый в [...]vendor/symfony/property-access/PropertyAccessor.php в строке 509
Что мне здесь не хватает? Я пробовал разные места и комбинации, но безрезультатно. И поиск в Google просто дает бесконечные примеры того, как сериализовать простые объекты без дочерних элементов.
Остальная часть моей конфигурации сериализатора - это в значительной степени версия документации + обработчик циклических ссылок< /em>
Подробнее здесь: https://stackoverflow.com/questions/782 ... nto-entity