【发布时间】:2019-03-19 15:17:17
【问题描述】:
如何配置 Symfony 序列化器组件以规范化对象(实体)的浮点属性?
详细说明:一个学说实体的taxRate 属性被映射到一个PHP 浮点值。我想用 JSON 表示的控制器做出响应,例如:
{taxRate:0.19}
但我得到的是
{taxRate:"0.19"}
实体的属性和注解的定义是:
class ExampleEntity {
/**
* @ORM\Column(type="decimal", precision=3, scale=2, nullable=true)
* @Groups({"api"})
*/
protected $taxRate;
}
控制器如下所示:
$serializer = $this->get('serializer');
return new JsonResponse(
$serializer->normalize(
$exampleEntity,
'json',
[
'groups' => 'api',
]
)
);
我不喜欢在 JavaScript 端将字符串转换为浮点数的解决方案。我的应用想要断言该属性为 NULL 或 Float 值。
如何做到这一点?
【问题讨论】:
-
试试
type="float" -
-
认真的吗?我试过了,它可以工作。但是 1. 这是在哪里记录的?因为那个注解是针对 Doctrine 的,对吧? 2. 我认为 DECIMAL 使用起来更安全,因为 MySQL FLOAT 类型需要 PHP 语言环境才能使用 '.'作为浮点分隔符,并非总是如此。 3. 谢谢! 4. 有没有办法坚持 DECIMAL 并实现浮点/双精度的转换? (我一直是这么想的)
-
@nifr 你是对的。但感谢 sietse85 的评论,我意识到“错误”的转换发生在序列化之前。我不知道 DECIMAL 被映射/转换为 PHP 字符串。我的错。现在我对这个事实有点不满意:)
-
好收获。您可以将
GetSetMethodNormalizer与public function getTaxRate(): float { return (float)$this->taxRate; }和public function setTaxRate($taxRate) { $this->taxRate = (float)$taxRate; }一起使用,以防止出现这些转换问题。
标签: php json symfony serialization