首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用自定义规范化器修改类属性

使用自定义规范化器修改类属性
EN

Stack Overflow用户
提问于 2018-03-26 11:00:32
回答 1查看 3.1K关注 0票数 1

我有一个实体,它有两个属性,namephotoname属性是从数据库中读取的,但是我必须用其他一些信息填充photo属性。

我遵循了来自docs的编写自定义名词化器教程,并做了自定义规范化器:

代码语言:javascript
复制
<?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实体并修改其属性?

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-03-26 12:30:05

尝试将其添加到supportsNormalization方法中:

代码语言:javascript
复制
public function supportsNormalization($data, $format = null)
{
    return
        $this->normalizer->supportsNormalization($data, $format)
        && is_object($data) && $data instanceof Style::class
        ;
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49489880

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档