Используйте пользовательский нормализатор для изменения свойств класса

У меня есть сущность с 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 сущность и изменить ее свойства?

Спасибо!

1

Решение

Попробуйте добавить это к вашему supportsNormalization методы:

public function supportsNormalization($data, $format = null)
{
return
$this->normalizer->supportsNormalization($data, $format)
&& is_object($data) && $data instanceof Style::class
;
}
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]