symfony2:如何在保持 fr 语言环境的同时使用点而不是逗号作为小数点分隔符

symfony2: how to use points instead of comma for decimals separator while keeping fr locale

在 Symfony 2 中,默认语言环境为法语,在某些情况下小数值分隔符在表单中呈现为逗号。

表单中的逗号并不总是转换为点,这是我的数据库使用的分隔符。

如何确保在表单提交后每个数字数据字段的逗号都被点替换?

我找到了 NumberToLocalizedStringTransformer:

This reference 但我是否需要向每个表单添加一个数据转换器才能使其按我的意愿工作?

使用 DataTransformer 是解决本地化问题的一种方法。您不需要将它添加到每个表单中。您可以创建自己的 FormType 扩展或继承(我猜)number 类型。在您自己的表单类型中,通过调用 FormBuilderInterface::addViewTranformer().

添加转换器

您可以找到更多 information here。这是我自己的自定义类型之一的示例。使用此方法,您还可以自定义用于渲染的小部件。

class CustomType extends NumberType
{        
    public function buildForm ( FormBuilderInterface $builder, array $options )
    {
        parent::buildForm( $builder, $options );

        $builder->addViewTransformer( new CustomTransformer() );
    }

    public function getName()
    {
        return 'my_custom_type';
    }
}

然后,当您想使用本地化号码时,使用 my_custom_type 而不是 number 构建表单。

另一种解决方案是通过在用户使用其他任何东西时显示错误来强制他们使用积分。 Look here 用于 Symfony 表单验证。 Regex 验证器与 /^(\d|\.)+$/ 之类的东西可以工作。