如何将Symfony表单MoneyType输入覆盖为type ="number"?

Jef*_*ett 6 php currency symfony-forms symfony

Symfony MoneyType字段呈现input type="text"允许用户在字段中键入他们想要的内容.

如何覆盖此渲染,input type="number"以便用户只能输入数字字符?

$formBuilder->add("amount", MoneyType::class, [
  'currency' => 'USD'
]);
Run Code Online (Sandbox Code Playgroud)

当前输出:

<div><label for="form_amount" class="required">Amount</label>$ <input type="text" id="form_amount" name="form[amount]" required="required"  /></div>
Run Code Online (Sandbox Code Playgroud)

我想要实现的目标:

<div><label for="form_amount" class="required">Amount</label>$ <input type="number" id="form_amount" name="form[amount]" required="required"  /></div>
Run Code Online (Sandbox Code Playgroud)

我试图简单地覆盖属性类型,但所有这一切都是在最后添加第二个type属性,这不起作用,因为它显然是无效的HTML.

$formBuilder->add("amount", MoneyType::class, [
  'attr' => [
    'type' => 'number',
  ],
  'currency' => 'USD'
]);
Run Code Online (Sandbox Code Playgroud)

这是我简单的树枝:

{{ form_start(form) }}

    {{ form_widget(form) }}

    <input type="submit" />

{{ form_end(form) }}
Run Code Online (Sandbox Code Playgroud)

我也很好奇,为什么这是Money的默认输入类型?我正在考虑扩展或修改课程以适应这一点,但我确信有一些我没有看到的优势.

Nic*_*muz 2

您可以自定义 MoneyType 的呈现方式。

{% extends 'form_div_layout.html.twig' %}

{% block money_widget %}
    {%- set type = type|default('number') -%}
    {{ parent() }}
{% endblock %}
Run Code Online (Sandbox Code Playgroud)

资料来源:

http://symfony.com/doc/current/form/form_customization.html#method-2-inside-a-separate-template https://github.com/symfony/symfony/issues/22937#issuecomment-304609466