1

name私は2つのプロパティを持つエンティティを持っています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メソッドが (データベース要素ごとに) 2 回実行されることがわかりました。変数を出力すると、最初$dataにエンティティ プロパティを取得し、2 回目に値を持つプロパティを取得しました。エンティティ全体を取得したことはありません。その後、メソッドは常に を返します。namephotonullStylesupportsNormalitzationfalse

Style完全なエンティティを取得してそのプロパティを変更するにはどうすればよいですか?

ありがとう!

4

1 に答える 1