Symfony表单:从Twig禁用字段的“必填”需求

8
我将尝试禁用在Symfony表单中的一个字段的前端HTML5验证。
在Twig中,我使用以下代码:
{{ form_widget(form.email, {'attr': {'class': 'form-control input-lg','novalidate': 'novalidate}}) }}

但该字段仍被视为必填项。我做错了什么?

你应该将其设置在表单本身上,而不是“电子邮件”字段上,对吧? - Flo Schild
我想让单个字段不是必填项,而不是整个表单... - Aerendir
@Aerendir - 我并不是在暗示你也要这么做,但如果其余的答案都执行了同样的操作,我通常会接受第一个答案。如果不接受,我会添加一条评论来解释原因,毫无怨言。 - BentCoder
2个回答

11

您可以在表单类型中设置该选项以禁用字段验证。

->add('test', null, array(
    'required' => false
))

如果您想要禁用整个字段,可以尝试类似于以下内容:

{{ form_start(form, { attr: {novalidate: 'novalidate'} }) }}

我只想让单个字段不是必填项,而不是整个表单,所以你建议的twig解决方案并不符合我的需求。尝试将required => false设置为false似乎不起作用,即使文档建议采用相同的方法 o.O - Aerendir
我在所有的表单中都使用它,而且它运行良好...你确定你已经正确设置了“required”吗? - René Höhle
我的错:我没有使用表单类型,而是直接在控制器中创建它。这些方法都很好用!谢谢! - Aerendir
啊好的 =) 那就玩得开心点。 - René Höhle
1
@Stony - +1 你说对了 :) - BentCoder

5
你可以在twig中这样做:

你只需要这样:

{{ form_start(form, { attr: {novalidate: 'novalidate'} }) }}

或者您可以在表单类型类中进行如下操作:

->add('name', 'text', ['required' => false])

编辑:

在下面的示例中,只有name字段会触发html5验证。

表单类

->add('name', 'text')
->add('middlename', 'text', ['required' => false])

Twig

{{ form_start(form) }}
    <p>NAME: {{ form_widget(form.name) }}</p>
    <p>MIDDLENAME: {{ form_widget(form.middlename) }}</p>

    <p><button name="button">Submit</button></p>
{{ form_end(form) }}

如上所述,我只是想要单个字段不是必需的,而不是整个表单...无论如何,感谢您的回复! - Aerendir
然后使用答案中显示的第二个选项,不要将其应用于其他字段。 - BentCoder
文档建议采用相同的方法,但似乎不起作用,我不知道为什么... - Aerendir
请看上面的例子。 - BentCoder
我的错:我没有使用表单类型,而是直接在控制器中创建它。这些方法都很好用!谢谢! - Aerendir

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接