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

Php 使用自定义规范化器修改类属性,php,symfony,api-platform.com,Php,Symfony,Api Platform.com,我有一个具有两个属性的实体,name和photo。name属性是从数据库中读取的,但是我必须用一些其他信息填充photo属性 我遵循了文档中的教程,并制作了自定义规范化器: <?php namespace App\Serializer; use App\Entity\Style; use Symfony\Component\Serializer\Normalizer\DenormalizerInterface; use Symfony\Component\Serializer\Norm

我有一个具有两个属性的实体,
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);
    }
}

尝试将此添加到您的
支持snormalization
方法中:

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

谢谢你的回答!它仍然不起作用。。。如果我添加一个
var\u dump($data)
它只打印一个带有
名称
属性内容的字符串,而
照片
属性为空……它从不打印完整的
样式
实体OK,我发现它只在我使用
json
格式(不适用于
json ld
和其他格式)时才起作用如果您想使用json ld,您必须修饰特定的api平台规范化程序:
decorates:'api_platform.jsonld.normalizer.item'
或对于json
decorates:'api_platform.jsonapi.normalizer.item'
`是的,很好!这就是我要找的!