项目中有一个数据字段是用百分比的,比如银行利率,活期 0.35%。数据库字段为 current_rate decimal(5,5)。
使用Symfony的CRUD生成的输入框默认是文本(text)类型的,如下:
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('currentRate');
}
需要改一下,在 src/Acme/UserBundle/Form/YourFormType.php中改成这样:
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('currentRate', 'percent', array('precision' => 3));
}
对上面代码的说明:percent就是我们需要使用的Form类型,该类型会自动在文本框后面加上一个百分号,同时数据显示的值已经乘以100,如下:
这样在插入或更新到数据库时,实际的数据是 0.00330
一个需要注意的地方是那个 “precision” 属性,表示精度,默认是0。这样的花,即使录入的数据是对的(0.00330),但是更新时会在文本框中显示成四舍五入后的 integer 类型的值(0)。手动设置成精确到小数后3位就没问题了。