【问题标题】:symfony2: trying to add a type="number" attribute to a form fieldsymfony2:尝试将 type="number" 属性添加到表单字段
【发布时间】:2014-10-25 10:10:58
【问题描述】:

我有这个字段,

 ->add('number', 'number', array(
'label' => false,
'attr' => array('class' => 'producto', 'type' => 'number')))

我希望添加一个type="number" 属性,用向下/向上的小箭头增加和减少里面的数字,但我得到一个带有 type="text" 属性的输入:

<input type="text" value="11" class="producto form-control" required="required" name="project_backendbundle_pedido[pedidoSubitems][0][number]" id="project_backendbundle_pedido_pedidoSubitems_0_number">

【问题讨论】:

    标签: symfony symfony-forms


    【解决方案1】:

    type 属性是通过您选择的小部件类型设置的。要获得type="number",您需要选择integer 作为小部件类型。令人困惑,我知道..

    但是看看official symfony page。所以你的代码应该是这样的:

    ->add('number', 'integer', array(
        'label' => false,
        'attr'  => array('class' => 'producto'),
    ))
    

    【讨论】:

    • 整数的问题是不能接收十进制数(例如:12,5)
    • 确实,但如 form_div_layout.html.twig 中所述,在块 'number_widget' 中输入 type="number" 不适用于浮点数
    • 输入类型数字确实适用于浮点数,但需要声明适当的scale 属性以用于表单字段。浏览器对number 表单字段和step 的支持是不可靠的,因此需要一个文本字段才能在所有浏览器中一致地工作。 caniuse.com/#feat=input-number
    【解决方案2】:

    要有一个你需要做的类型号(对于 symfony 2.8):

    在表单生成器中使用这些参数:

    ->add('fixedCharge', 'number', array(
                        'required' => true,
                        'rounding_mode' => 0,
                        'precision' => 2,
                        'scale' => 7,
                        'attr' => array(
                            'min' => -90,
                            'max' => 90,
                            'step' => 0.01,
                        ),
                    ))
    

    在 twig 中明确定义为数字:

    {{ form_widget(form.fixedCharge, { 'type':'number' }) }}
    

    此外,对于忽略 HTML5 验证的浏览器,您还可以在实体字段上添加服务器端验证:

    @Assert\Type(type="float", message="must be a numeric value")
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-10-09
      • 2013-08-02
      • 2015-08-30
      • 2023-03-26
      • 1970-01-01
      • 1970-01-01
      • 2015-05-09
      相关资源
      最近更新 更多