Symfony 2.8:分数的百分比表单字段验证不正确



当我尝试用分数值保存类型为"percent"的Symfony 2.8表单字段时,验证返回

此值不应为空。

我已经按照说明在我的实体中设置了该字段:

/**
* @var decimal
*
* @ORMColumn(
name="total_percent", 
type="decimal", 
precision=14, 
scale=8, 
nullable=false
)
* @AssertNotNull()
*/
private $percent;

我创建我的字段如下:

->add('percent', 
PercentType::class, 
array(
'scale' => 8, 
'attr' => array('class' => 'percent_field'))
)

我已经仔细检查了数据库,我可以创建带有分数的条目,所以问题似乎出在 Symfony 的表单上。但是,我在代码中找不到问题。 有没有人成功实施了这一点。从本质上讲,我希望能够节省1.5%的百分比。 任何建设性的想法(与手头的问题有关)都值得赞赏。

如教义文档中所述:

精度

:小数(精确数字)列的精度(适用) 仅适用于十进制列),这是最大位数 为值存储。

小数位数:小数(精确数字)列的小数位数(仅适用于 对于十进制列),表示 小数点右侧,并且不得大于精度。

要存储简单的百分比值(如1.5%)和从0.0100.0的相对(正)范围,您应该修改列映射:

/**
* @var decimal
*
* @ORMColumn(
*     name="total_percent", 
*     type="decimal", 
*     precision=4, # <-- THIS IS NEEDED TO BE ALLOWED TO STORE ALSO 100.0,
*     scale=1, # <-- THIS ALLOWS ONLY 1 DECIMAL
*     nullable=false
*  )
* @AssertNotNull()
* @AssertRange(
*      min = 0,
*      max = 100,
*      minMessage = "Min % is 0",
*      maxMessage = "Max % is 100"
* )
*/
private $percent;

和表单字段:

->add('percent', 
PercentType::class, 
array(
'type' => 'integer', # <-- SET THE TYPE AS INTEGER!
'scale' => 1,
'attr' => array('class' => 'percent_field')
)
)

为了避免值过高,100.0使用Range约束,如我的示例所示。

在我的测试中,这种配置运行良好,允许用逗号分隔的小数,如"34,2"或"1,5",所有像"23,5543"的值将四舍五入到缺陷或多余的最接近的值(在这种情况下将是"23,6")。

最新更新