如何在Twig模板中隐藏表单字段?

9
我有一个Symfony表单,其中包含两个字段。如果某个检查评估为,我不想显示字段,而是输出字段的静态内容,并将表单字段作为字段包含。我该如何做到这一点?
3个回答

20
您可以通过假装已经渲染该表单字段来防止任何输出:
{{ form_start(form) }}
    {% if someValue == true %}
        {% do form.fieldName.setRendered() %}
    {% endif %}
{{ form_end(form) }}

很高兴知道这个。谢谢! - Gottlieb Notschnabel
2
这就是我一直在寻找的!谢谢。 - Dani Tome
this is actually I want ;) - A.Seddighi
我有一个问题;当我使用这段代码并提交表单数据时,数据会变为空,但是我在表单中有数据。 - A.Seddighi
是的,如果您有一个字段的值并希望保留它,则需要使用此问题中的另一种方法。这个答案旨在从HTML代码中删除字段的所有痕迹,这也会导致在传输表单时不设置值。 - MaPePeR

15

您可以使用HiddenType或在模板中隐藏字段:

{{ form_start(form) }}
    {% if someValue == true %}
        {{ form_widget(form.fieldName) }}
    {% else %}
        {{ form_widget(form.fieldName, { 'attr': {'class': 'hidden-row'} }) }}
    {% endif %}
    {# other fields... #}
{{ form_end(form) }}

或者您可以在表单类型中使用像FormEvents :: PRE_SET_DATA这样的FormEvents。 (文档)


1
我原本希望在 form_row 中有某种开关,但我怀疑 Symfony 没有实现这个功能... - Gottlieb Notschnabel
@GottliebNotschnabel 实际上是这样的 :), 我更新了我的回答。 - b3da
不,我的意思不是通过 CSS 隐藏它,而是将其呈现为隐藏字段。但我看到你的第二种方法允许这样做。太好了,谢谢! - Gottlieb Notschnabel

-1
如果您使用Symfony 4.4,您可以设置`div style="display: none;"`样式:
{{ form_start(form) }}
  <div class="row">
    {% if app.user %}
    <div class="col-lg-12">
      <fieldset>
        Login by: {{ app.user.username }}
      </fieldset>
    </div>
    <div class="col-lg-12">
      <fieldset>
        Mail : {{ app.user.email }}
      </fieldset>
    </div>
    <div class="col-md-12 col-sm-12" style="display: none;">
      <fieldset>
        {{ form_widget(form.owner, { 'attr': {'class': '', value: 'null'}}) }}
      </fieldset>
    </div>
    {% else %}
    <div class="col-md-6 col-sm-12">
      <fieldset>
        {{ form_widget(form.owner, {'attr': {'class': ''}}) }}
      </fieldset>
    </div>
    {% endif %}
    <div class="col-lg-12">
      <fieldset>
        {{ form_widget(form.content, {'attr': {'class': ''}}) }}
      </fieldset>
    </div>
    <div class="col-lg-12">
      <fieldset>
        <button type="submit" class="main-button">New</button>
      </fieldset>
    </div>
  </div>
{{ form_end(form) }}

请分享更多细节。在您的代码中,没有条件来检查其他字段。请记住,良好的解释有助于他人理解您的答案。 - Nico Haase

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