2015-10-07 83 views
0

我想知道这个特定的验证行为,虽然比解决实际生活问题更出于好奇,但我很想知道答案。验证中的Symfony范围

实体属性价格被定义为:

/** 
* @ORM\Column(name="price", type="float", nullable=false) 
*/ 

在Symfony的manual targeting 2.7,范围的最低和最高的选项为“整数”的类型。但实际上使用浮动,它的工作如预期:

#validation.yml 
Project\MyBundle\Entity\Product: 
    properties: 
     price: 
      - Range: 
       min: 0.01 
       max: 12.90 
       minMessage: Price can't be lower than 0,01€ 
       maxMessage: Price can't be lower than 12,90€ 

enter image description here

最大审定工作未做高于12,90在图片中看到失败的任何值的任何问题。 分钟验证没有:

输入0,009将通过验证虽然是小于0.01。

是否有任何理由,最小值和最大值记录为类型:整数,但工作验证浮点值? 有没有人有这个问题的有效答案?

+0

胡乱猜测:你在昏迷后舍入到第二位,这样' 0.009'变成了'0.01'?另一个要考虑的事情是浮点精度。 – k0pernikus

回答

0

价格类型具有精度2点,因此您的数字将被四舍五入

0.009,相当于0.01

+0

formType是货币类型,没有定义“比例”。我也尝试将数据库字段更新为float(6,3),这使我可以直接在mysql中保存0.009。唯一的问题是,如果在Doctrine中我的浮点定义有问题http://stackoverflow.com/questions/7296027/doctrine-2-2-decimal-places-on-a-float –

+0

ORM列注释有选项“precision “,”规模“。 第4.3章:[链接](http://doctrine-orm.readthedocs.org/projects/doctrine-orm/en/latest/reference/basic-mapping.html)。 – Snoozer