我正在使用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位以上的数字
答案 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。