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
- 2253 reads