如何使用form_widget将字段大小固定为maxlength

时间:2019-06-19 10:47:04

标签: symfony twig maxlength

我正在使用form_widget渲染字段,我想要的是将数字限制为5 (不要让用户输入超过8位数字),例如html中的maxlengh

我尝试过:

 {{ form_widget(form.telMobile, {'attr':{'class': 'form-control','placeholder' :'number - 8 digits',  'size' : '8' }}) }}

 {{ form_widget(form.telMobile, {'attr':{'class': 'form-control','placeholder' :'number - 8 digits',  'maxlength' : '8'  }}) }}

在验证之前如何限制位数?

更新:仍然无法运行

这是我的表单生成器

->add('telMobile', null,array('label' => 'common.label.telmobile', 'required' => true ,'attr' => ['pattern' => '/^[0-9]{8}$/']))

我也尝试过将图案添加到小部件中:

 {{ form_widget(form.telMobile, {'attr':{'class': 'form-control','placeholder' :'Téléphone mobile - 8 chiffres', pattern' : '/^[0-9]{8}$/' }}) }}

如您在图片中看到的,我仍然可以输入8位以上的数字

enter image description here

2 个答案:

答案 0 :(得分:0)

这个问题与数字输入的html选项更多相关,您可以在数字输入中使用'max'和'min'参数

<input type="number" min="1" max="99999" />

因此使用form_widget它将显示下一个:

 {{ form_widget(form.number, {'attr':{'class': 'form-control','placeholder' :'number - 5 digits','type':'number',  'max' : '99999'  }}) }}

但是更方便的是使用NumberType::class创建表单字段并在其中添加'attr'。 另外,如果您只需要5个数字,则可以使用正则表达式进行验证,但输入类型应为"text",然后:

'pattern' : '[0-9]{5}'  -this will expect exactly 5 digits

总而言之,如果您需要安全的话,更好的方法是使用验证器在symfony的后端使用正则表达式。 附言如果输入的类型是文本,则maxlength有效。

答案 1 :(得分:0)

由于您将null作为字段类型传递给FormBuilder,因此Symfony的 Type Guessing System 开始起作用。这试图猜测适用于您字段的表单控件根据其定义。从屏幕快照中的箭头来看,它解析为NumberType,并且数字字段没有maxlength属性。

要解决此问题,您必须将其显式设置为TextType

->add('telMobile', TextType::class, array(
    'label' => 'common.label.telmobile', 'required' => true, 
    'attr' => ['pattern' => '/^[0-9]{8}$/', 'maxlength' => 8])
 )

但是,这将具有其自身的权衡:现在输入的长度将受到限制,但用户将能够输入字母。如果不希望这样做,并且您想拒绝无效输入,则必须使用javascript solution