【发布时间】:2019-07-14 15:21:49
【问题描述】:
我在将 Symfony Serializer 注入控制器时遇到问题。 这是我想要实现的行为的一个工作示例:
public function someAction(): Response
{
$goodViews = //here I get an array of Value Objects or DTO's ;
$serializer = new Serializer([new ObjectNormalizer()], [new JsonEncoder()]);
// normalize gives me a proper array for serialization
return $this->json(
$serializer->normalize($goodViews)
);
}
但是现在我需要将使用依赖注入的 Serializer 直接创建更改为控制器构造函数或操作。我认为,另一种方法是创建将 ObjectNormalizer 和 JsonEncoder 作为参数的服务,然后创建一个 Serializer,然后以特殊方法规范化对象数组并返回结果。但我无法弄清楚如何在 service.yml 中创建序列化程序或正确描述服务依赖项。 Symfony 文档也可以获得简单的序列化器服务,或者像我在代码示例中那样手动创建它。
我想从操作中的服务容器获取序列化程序服务(使用 $this->get('serializer'))或使用 NormalizerInterface 将其注入控制器构造函数(我主要需要规范化对象数组),但是这个注入的序列化程序出现了这样的错误:
"message": "Cannot normalize attribute \"options\" 因为 注入的序列化程序不是规范化程序”,“类”: "Symfony\Component\Serializer\Exception\LogicException",
所以我想,它没有按照我手动创建序列化程序的方式进行配置。
我们的 Symfony 版本是 3.4 感谢您的关注。
【问题讨论】:
标签: symfony dependency-injection serialization