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

问题描述 投票:0回答:3

我的应用程序更喜欢

de
作为 locale 显示数字,如 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
,该字段工作。尽管值属性已使用德语格式的数字正确填充,但该值未显示在生成的输入字段中:
<input type="number" value="1234567,89">

使用语言环境

en
现场工作:
<input type="number" value="1234567.89">

有趣的事实:我的浏览器(Firefox 45.9.0 和 Google Chrome v54.0.2840.71,debian/64 位)检测我计算机的区域设置de,并将数字显示为德语格式的数字,即使我选择应用程序的区域设置为

en
(仅限类型为
number
的输入字段)

添加 lang 属性

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

非常感谢!

php html forms symfony locale
3个回答
2
投票

解决了问题...不要将 symfony 的

NumberType
用于 HTML5 类型的
number
输入元素!

改为使用常见的

TextType
表单类型

public function buildForm(FormBuilderInterface $builder, array $options)
{
    $builder->add('myNumber', TextType::class, [...]);
}

并通过模板添加属性

type="number"
。例如,使用 Twig 引擎,您可以使用以下代码:

{{ form_widget(form.myNumber, {'type':'number', 'lang': app.request.locale}) }}

0
投票

这是老问题,但还没有正确答案,问题仍然存在。

从 Symfony 4.3 开始,引入了选项“html5”。默认为“False”,但如果设置为 true,HTML 输入将呈现为本机 HTML5 type="number" 表单。 https://symfony.com/doc/4.x/reference/forms/types/number.html#input

所以在你的情况下:

$builder->add('myNumber', NumberType::class, [
        'label'    => 'Tax [EURO]',
        'html5'    => true,
        'required' => false,
        'scale'    => 2,
        'attr'     => array(
            'min'  => 0,
            'max'  => 9999.99,
            'step' => 0.01,
        ),
    ]);

问候


-1
投票

你可以尝试设置 html lang 属性

<html lang="de">

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

喜欢

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

允许使用逗号和点

© www.soinside.com 2019 - 2024. All rights reserved.