Symfony MoneyType Field呈现为input type="text"
,允许用户在字段中键入任何他们想要的内容。
如何覆盖它以呈现为input type="number"
,以便用户只能输入数字字符?
$formBuilder->add("amount", MoneyType::class, [
'currency' => 'USD'
]);
电流输出:
<div><label for="form_amount" class="required">Amount</label>$ <input type="text" id="form_amount" name="form[amount]" required="required" /></div>
我想达到的目标:
<div><label for="form_amount" class="required">Amount</label>$ <input type="number" id="form_amount" name="form[amount]" required="required" /></div>
我试图简单地覆盖属性类型,但所做的只是在最后添加了第二个type
属性,这不起作用,因为它显然是无效的HTML。
$formBuilder->add("amount", MoneyType::class, [
'attr' => [
'type' => 'number',
],
'currency' => 'USD'
]);
下面是我的简单的小树枝:
{{ form_start(form) }}
{{ form_widget(form) }}
<input type="submit" />
{{ form_end(form) }}
我也很好奇,* 为什么这是Money的默认输入类型?* 我正在考虑扩展或修改类以适应这一点,但我确信有一些优势我没有看到。
5条答案
按热度按时间f5emj3cl1#
为什么不使用'scale'来指定小数位数,同时使用'placeholder'来告诉用户格式:
我不知道这是否有帮助。
编辑#2.在得到反馈后,我认为这应该对你有用:
有关添加验证的信息,请参阅此链接:http://symfony.com/doc/current/book/forms.html#adding-validation
上面的正则表达式指定小数点前至少有1位数字,小数点后至少有2位数字。在你最初的帖子中,你提到了“货币”,但那是一个“字符串”。您可以根据需要修改正则表达式。
我还没有验证这一点(我使用类似的东西),但我认为它应该工作。
mbjcgjjk2#
您可以自定义MoneyType的呈现方式。
资料来源:
http://symfony.com/doc/current/form/form_customization.html#method-2-inside-a-separate-templatehttps://github.com/symfony/symfony/issues/22937#issuecomment-304609466
9rnv2umw3#
您应该能够覆盖默认字段模板:
由
在自定义模板定义中
app/Resources/views/form/fields.html.twig
有关如何覆盖字段模板的详细信息,请参阅此文档:
http://symfony.com/doc/current/cookbook/form/form_customization.html#method-2-inside-a-separate-template
yhxst69z4#
我也有同样的问题。当我在Money Type字段中输入一个字符串时,我收到一条php“number parsing failed”消息。
为了解决这个问题,我修改了我的php.ini文件中的intl.error_level值为0。您也可以对该行进行注解。
PHP不再出错如果我输入一个字符串,错误是由Symfony处理的,我只是在我的输入下显示消息“此值无效”。所以不需要覆盖
input type="text"
!o7jaxewo5#
有同样的问题。您可以通过将“html5”选项设置为true并将“step”属性传递给值为“.01”的“attr”选项以允许浮点数来覆盖MoneyType字段作为字符串的默认呈现。
下面是如何执行此操作的示例:
通过浏览MoneyType,你可以看到“html5”选项在做什么:
我希望它有帮助!