symfony规范化实体时未找到支持的规范化程序

zzoitvuj  于 2022-11-16  发布在  其他
关注(0)|答案(3)|浏览(177)

我正在编写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.

我到底做错了什么?

vcirk6k6

vcirk6k61#

我只是没有意识到我必须在序列化器定义中声明所有需要的normailizer。我通过以下操作解决了这个问题:

$encoder = new JsonEncoder();

$serializer = new Serializer(array(

    new JnToneNormalizer(),
    new JnWsKeyToneNormalizer()

), array($encoder));
67up9zun

67up9zun2#

Symfony似乎有ObjectNormalizer,我想你可以利用它,检查安装和使用情况,我认为还有一种方法可以使用注解和组来执行复杂嵌套对象的序列化。

mitkmikd

mitkmikd3#

如果下次出现此错误,请首先检查是否已安装序列化程序包。

composer require symfony/serializer-pack

相关问题