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

Jul*_*lie 1 maxlength symfony twig

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

\n\n

我努力了 :

\n\n
 {{ form_widget(form.telMobile, {\'attr\':{\'class\': \'form-control\',\'placeholder\' :\'number - 8 digits\',  \'size\' : \'8\' }}) }}\n\n {{ form_widget(form.telMobile, {\'attr\':{\'class\': \'form-control\',\'placeholder\' :\'number - 8 digits\',  \'maxlength\' : \'8\'  }}) }}\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n\n

更新:仍然无法工作

\n\n

这是我的表单生成器

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

我也尝试将模式添加到小部件中:

\n\n
 {{ form_widget(form.telMobile, {\'attr\':{\'class\': \'form-control\',\'placeholder\' :\'T\xc3\xa9l\xc3\xa9phone mobile - 8 chiffres\', pattern\' : \'/^[0-9]{8}$/\' }}) }}\n
Run Code Online (Sandbox Code Playgroud)\n\n

正如你在图片中看到的,我仍然可以输入超过 8 位数字

\n\n

在此输入图像描述

\n

msg*_*msg 5

由于您将传递null给 作为FormBuilder您的字段类型,Symfony 的类型猜测系统正在启动。它尝试根据您的字段的定义猜测适当的表单控件。从屏幕截图中的箭头来看,它解析为NumberType,并且数字字段没有属性maxlength

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

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

然而,这将带来其自身的权衡:现在输入的长度将受到限制,但用户将能够输入字母。如果这不是我们所希望的,并且您想拒绝无效输入,则必须使用javascript 解决方案