symfony - symfony 在规范化实体时找不到支持规范化器
问题描述
我正在开发 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.
我做错了什么?
解决方案
我只是没有意识到我必须在序列化程序定义中声明所有需要的规范化程序。我解决了它:
$encoder = new JsonEncoder();
$serializer = new Serializer(array(
new JnToneNormalizer(),
new JnWsKeyToneNormalizer()
), array($encoder));
推荐阅读
- xcode - 如何在命令行 xcode 构建中排除特定架构
- flexbox - Quasar Grid 左对齐最后一行的项目
- amazon-web-services - 从 AWS RDS 实例访问从 AWS RDS 快照导出到 S3 的数据库数据
- google-analytics - 为什么带有包含“gclid”的查询字符串的传入服务器请求格式错误?
- vue.js - Vuetify - 使用 URL 参数同步分页
- java - Kafka No Acknowledgement 可用作参数
- python - PyDrake:从机器人中提取 AutoDiff 梯度(通过微分逆运动学控制)
- php - Laravel PHP以特定方式返回数组
- c# - MVC SPA 应用程序
- .net - 在 Azure 中发布:不匹配依赖项错误。是什么导致它以及在通过管道使用发布时如何解决它?