Symfony的NumberType作为HTML5输入字段和自定义区域设置

时间:2017-06-22 10:37:28

标签: php html5 forms symfony locale

我的应用程序更喜欢de作为区域设置来显示1.234.567,89而不是1,234,567.89(或1234567,89而非1234567.89)等数字。

所以我更改了config.yml

中的本地参数
parameters:
    locale: de

此外,我使用 NumberType 生成表单字段:

class MyFormType extends AbstractType
{

    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder->add('myNumber', NumberType::class, [
            'label'    => 'Tax [EURO]',
            'required' => false,
            'scale'    => 2,
            'attr'     => array(
                'min'  => 0,
                'max'  => 9999.99,
                'step' => 0.01,
            ),
        ]);
    }
}

现在, myNumber 的值显示为生成的HTML5输入字段的德语格式化数字,该字段既可以工作也可以显示任何数字。如果我将语言环境更改为en,一切正常。

IMO html5输入字段需要填充英文格式的数字。但是我如何设法输出数字而不是德语呢?

摘要

使用区域设置de,该字段工作。尽管使用德语格式化的数字正确填充了value属性,但该值不会显示在生成的输入字段中:<input type="number" value="1234567,89">

使用区域设置en,该字段有效:<input type="number" value="1234567.89">

有趣的事实:我的浏览器(Firefox 45.9.0和谷歌浏览器v54.0.2840.71,debian / 64位)检测到我的计算机的区域设置 de 并显示该号码即使我将应用程序的语言环境转换为ennumber类型的onlinput字段),也可以作为德语格式的数字

添加lang属性<html lang="{{ app.request.locale }}">没有帮助。

非常感谢!

2 个答案:

答案 0 :(得分:1)

解决了问题...不要将symfony的 NumberType 用于 HTML5 类型{的输入元素{1}}!

而是使用常见的number表单类型

TextType

并通过模板添加属性public function buildForm(FormBuilderInterface $builder, array $options) { $builder->add('myNumber', TextType::class, [...]); } 。例如,使用Twig引擎,您可以使用以下代码:

type="number"

答案 1 :(得分:0)

您可以尝试设置html lang属性

<html lang="de">

但我认为你应该使用模式属性而不是数字,因为你不能依赖于浏览器的决定,请查看这篇文章https://ctrl.blog/entry/html5-input-number-localization

喜欢

<input type="number" pattern="[0-9]+([,\.][0-9]+)?"

允许使用逗号和点