У меня есть сущность с 2 свойствами, name
а также photo
, name
свойство читается из базы данных, но я должен заполнить photo
собственность с некоторой другой информацией.
Я следовал за Написание пользовательского номайзера учебник из документации, и я сделал свой собственный нормализатор:
<?php
namespace App\Serializer;
use App\Entity\Style;
use Symfony\Component\Serializer\Normalizer\DenormalizerInterface;
use Symfony\Component\Serializer\Normalizer\NormalizerInterface;
use Vich\UploaderBundle\Templating\Helper\UploaderHelper;
final class StyleNormalizer implements NormalizerInterface, DenormalizerInterface
{
private $normalizer;
private $uploaderHelper;
public function __construct(NormalizerInterface $normalizer, UploaderHelper $uploaderHelper)
{
if (!$normalizer instanceof DenormalizerInterface) {
throw new \InvalidArgumentException('The normalizer must implement the DenormalizerInterface');
}
$this->normalizer = $normalizer;
$this->uploaderHelper = $uploaderHelper;
}
public function denormalize($data, $class, $format = null, array $context = [])
{
return $this->normalizer->denormalize($data, $class, $format, $context);
}
public function supportsDenormalization($data, $type, $format = null)
{
return $this->normalizer->supportsDenormalization($data, $type, $format);
}
public function normalize($object, $format = null, array $context = [])
{
if ($object instanceof Style) {
$object->setPhoto('http://api-platform.com');
}
return $this->normalizer->normalize($object, $format, $context);
}
public function supportsNormalization($data, $format = null)
{
return $this->normalizer->supportsNormalization($data, $format);
}
}
Но photo
Недвижимость не заполнена необходимой информацией.
После небольшой отладки я обнаружил, что supportsNormalization
Метод выполняется два раза (для каждого элемента базы данных). Если я распечатаю $data
переменная, я получил сущность name
собственность в первый раз, а photo
собственность с null
цени во второй раз. Я никогда не получил весь Style
юридическое лицо. Тогда supportsNormalitzation
метод всегда возвращает false
,
Как я могу получить полный Style
сущность и изменить ее свойства?
Спасибо!
Попробуйте добавить это к вашему supportsNormalization
методы:
public function supportsNormalization($data, $format = null)
{
return
$this->normalizer->supportsNormalization($data, $format)
&& is_object($data) && $data instanceof Style::class
;
}
Других решений пока нет …