我有一个实体,它有两个属性,name和photo。name属性是从数据库中读取的,但是我必须用其他一些信息填充photo属性。
我遵循了来自docs的编写自定义名词化器教程,并做了自定义规范化器:
<?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属性,第二次得到带有null值的photo属性。我从来没有得到整个Style实体。然后supportsNormalitzation方法总是返回false。
如何获得完整的Style实体并修改其属性?
谢谢!
发布于 2018-03-26 12:30:05
尝试将其添加到supportsNormalization方法中:
public function supportsNormalization($data, $format = null)
{
return
$this->normalizer->supportsNormalization($data, $format)
&& is_object($data) && $data instanceof Style::class
;
}https://stackoverflow.com/questions/49489880
复制相似问题