symfony не найден поддерживающий нормализатор при нормализации сущности - PullRequest
0 голосов
/ 15 сентября 2018

Я работаю над Symfony 4.1. Я определил два нормализатора в моем service.yml.

api.tone_normalizer:
    class: App\Serializer\Normalizer\JnToneNormalizer
    tags: [serializer.normalizer]

и

api.wskeytone_normalizer:
    class: App\Serializer\Normalizer\ApiWsKeyToneToneNormalizer
    tags: [serializer.normalizer]

Здесь первый нормализатор. Знает о сущностях JnTone.

<?php
namespace App\Serializer\Normalizer;


use App\Entity\JnTone;
use Symfony\Component\Serializer\Normalizer\NormalizerInterface;
/**
 * JnTone normalizer
 */
class JnToneNormalizer implements NormalizerInterface
{
    /**
     * {@inheritdoc}
     */
    public function normalize($object, $format = null, array $context = array())
    {

        return [
            'id'   => $object->getId(),
            'name' => $object->getName(),
        ];
    }

    /**
     * {@inheritdoc}
     */
    public function supportsNormalization($data, $format = null)
    {
        return $data instanceof JnTone;
    }
}

И нормализатор, куда я хочу позвонить первым. rootTone является экземпляром сущности JnTone, поэтому я хочу вызвать нормализатор JnTone.

<?php
namespace App\Serializer\Normalizer;


use App\Entity\JnWsKey;
use App\Entity\JnTone;
use Symfony\Component\Serializer\Normalizer\NormalizerAwareInterface;
use Symfony\Component\Serializer\Normalizer\NormalizerAwareTrait;
use Symfony\Component\Serializer\Normalizer\NormalizerInterface;
use Symfony\Component\Serializer\Normalizer\SerializerAwareNormalizer;

use Symfony\Component\Serializer\SerializerAwareTrait;
use Symfony\Component\Serializer\SerializerAwareInterface;
/**
 * JnWsKey normalizer
 */
class ApiWsKeyNormalizer implements NormalizerInterface, SerializerAwareInterface
{
    use NormalizerAwareTrait;
    use SerializerAwareTrait;

    private $tones;

    /**
     * {@inheritdoc}
     */
    public function normalize($object, $format = null, array $context = array())
    {


        return [
            'id'=>$object->getId(),
            'name'=>$object->getName(),
            'rootTone'=>$this->serializer->normalize($object->getRootTone(),$format,$context)

        ];



    }


    /**
     * {@inheritdoc}
     */
    public function supportsNormalization($data, $format = null)
    {
        return $data instanceof JnWsKey ;
    }



}

Я не могу заставить это работать. Первый нормализатор не найден

Could not normalize object of type App\Entity\JnTone, no supporting normalizer found.

Что я делаю не так?

1 Ответ

0 голосов
/ 15 сентября 2018

Я просто не понял, что мне нужно объявить весь необходимый нормалайзер в определении сериализатора. Я решил это сделать:

$encoder = new JsonEncoder();

$serializer = new Serializer(array(

    new JnToneNormalizer(),
    new JnWsKeyToneNormalizer()

), array($encoder));
...