symfony deserialize EntityNormalizer -- объект по id. Сохранение связаннной сущности
Primary tabs
Можно создать App\Normalizer\EntityNormalizer.php с таким содержимым:
<?php declare(strict_types = 1); namespace App\Normalizer; use Doctrine\ORM\EntityManagerInterface; use Symfony\Component\Serializer\Normalizer\ObjectNormalizer; use Symfony\Component\Serializer\Mapping\Factory\ClassMetadataFactoryInterface; use Symfony\Component\Serializer\NameConverter\NameConverterInterface; use Symfony\Component\PropertyAccess\PropertyAccessorInterface; use Symfony\Component\PropertyInfo\PropertyTypeExtractorInterface; /** * Entity normalizer */ class EntityNormalizer extends ObjectNormalizer { /** * Entity manager * @var EntityManagerInterface */ protected $em; /** * Entity normalizer * @param EntityManagerInterface $em * @param ClassMetadataFactoryInterface|null $classMetadataFactory * @param NameConverterInterface|null $nameConverter * @param PropertyAccessorInterface|null $propertyAccessor * @param PropertyTypeExtractorInterface|null $propertyTypeExtractor */ public function __construct( EntityManagerInterface $em, ?ClassMetadataFactoryInterface $classMetadataFactory = null, ?NameConverterInterface $nameConverter = null, ?PropertyAccessorInterface $propertyAccessor = null, ?PropertyTypeExtractorInterface $propertyTypeExtractor = null ) { parent::__construct($classMetadataFactory, $nameConverter, $propertyAccessor, $propertyTypeExtractor); // Entity manager $this->em = $em; } /** * @inheritDoc */ public function supportsDenormalization($data, $type, $format = null) { return strpos($type, 'App\\Entity\\') === 0 && (is_numeric($data) || is_string($data)); } /** * @inheritDoc */ public function denormalize($data, $class, $format = null, array $context = []) { return $this->em->find($class, $data); } }
О подключении вместе с DateTimeNormilizer см. тут, или просто в оригинальной статье-источнике https://medium.com/cloudstek/using-the-s...
- Log in to post comments
- 2119 reads