如何获取输入表单类型

Zhu*_*ukV 17 symfony twig

我想获取表单字段类型并设置类fot字段类型

我尝试:

{# Form field row #}
{% block form_row %}
{% spaceless %}
  <div class="field-group{% if errors|length > 0%} error{%endif%}" id="fc-{{ id }}">
    {{ form_label(form, label|default(null)) }}
    <div class="field-item {{ type }}">
      {{ form_widget(form) }}
      {% if errors|length > 0 %}
        <div class="errors">{{ form_errors(form) }}</div>
      {% endif %}
    </div>
  </div>
{% endspaceless %}
{% endblock %}
Run Code Online (Sandbox Code Playgroud)

但{{type}}无效.

A.L*_*A.L 23

从MatsRietdijk答案是正确的,但作为Symfony的2.3类型的指数似乎已经从2改为1.其结果,{{ form.vars.block_prefixes.1 }}将返回checkbox,date,choice,等.

在进行应用程序范围的自定义,您可以使用它向表单行添加类:

{% block form_row %}
    <div class="form_row {{ form.vars.block_prefixes.1 }}">
        {{ form_label(form) }}
        {{ form_widget(form) }}
        {{ form_errors(form) }}
    </div>
{% endblock form_row %}
Run Code Online (Sandbox Code Playgroud)

然后你可以应用CSS规则:

div.form_row.text {color:Red;}
Run Code Online (Sandbox Code Playgroud)

Twitter Bootstrap

如果您使用Twitter引导程序,则可能会遇到问题,因为.checkbox该类存在于引导程序中.我建议使用Symfony表格行的前缀:

{% block form_row %}
    <div class="form_row symfony_{{ form.vars.block_prefixes.1 }}">
        {{ form_label(form) }}
        {{ form_widget(form) }}
        {{ form_errors(form) }}
    </div>
{% endblock form_row %}
Run Code Online (Sandbox Code Playgroud)

CSS文件中的规则将有所不同:

div.form_row.symfony_text {color:Red;}
Run Code Online (Sandbox Code Playgroud)

更新

Twitter引导程序表单主题现在包含在Symfony 2.6中.

  • 注意:在嵌套/包含的表单上,它返回实体的名称(因为这实际上是自定义字段类型名称).例如,在常规文本字段上:0 => form,1 => text,3 => _ view_version_title在ckeditor字段上:0 => form,1 => text,2 => textarea,3 => ckeditor,4 = > _view_version_content_content但是在嵌套表单上:0 => form,1 => viewVersion,2 => _ view_version (2认同)

Mat*_*ijk 19

您可以使用以下方法获取字段类型:

{{ form.FIELD_NAME.vars.block_prefixes.2 }}
Run Code Online (Sandbox Code Playgroud)

因此,如果您在表单中有一个名为message的字段,请使用以下命令:

{{ form.message.vars.block_prefixes.2 }}
Run Code Online (Sandbox Code Playgroud)

对于嵌套表单字段类型,请使用:

{{ form.NESTED_FORM_NAME.FIELD_NAME.vars.block_prefixes.2 }}
Run Code Online (Sandbox Code Playgroud)

编辑:

要覆盖基本表单块,请在模板文件中执行以下操作:

....
{% form_theme form _self %}
{% block widget_attributes %}
{% spaceless %}
    id="{{ id }}" name="{{ full_name }}"{% if read_only %} readonly="readonly"{% endif %}{% if disabled %} disabled="disabled"{% endif %}{% if required %} required="required"{% endif %}{% if max_length %} maxlength="{{ max_length }}"{% endif %}{% if pattern %} pattern="{{ pattern }}"{% endif %}
    {% if not attr.class is defined %}
        class="{{ type|default('text') }}"
    {% endif %}
    {% for attrname, attrvalue in attr %}{% if attrname in ['placeholder', 'title'] %}{{ attrname }}="{{ attrvalue|trans({}, translation_domain) }}" {% elseif attrname == 'class' %}{{ attrname }}="{{ type|default('text') }} {{ attrvalue }}"{% else %}{{ attrname }}="{{ attrvalue }}" {% endif %}{% endfor %}
{% endspaceless %}
{% endblock widget_attributes %}
{% block content %}
    ....
{% endblock %}
Run Code Online (Sandbox Code Playgroud)

或获得beter类型:

....
{% form_theme form _self %}
{% block widget_attributes %}
{% spaceless %}
    id="{{ id }}" name="{{ full_name }}"{% if read_only %} readonly="readonly"{% endif %}{% if disabled %} disabled="disabled"{% endif %}{% if required %} required="required"{% endif %}{% if max_length %} maxlength="{{ max_length }}"{% endif %}{% if pattern %} pattern="{{ pattern }}"{% endif %}
    {% if not attr.class is defined %}
        class="{{ form.vars.block_prefixes.2 }}"
    {% endif %}
    {% for attrname, attrvalue in attr %}{% if attrname in ['placeholder', 'title'] %}{{ attrname }}="{{ attrvalue|trans({}, translation_domain) }}" {% elseif attrname == 'class' %}{{ attrname }}="{{ form.vars.block_prefixes.2 }} {{ attrvalue }}"{% else %}{{ attrname }}="{{ attrvalue }}" {% endif %}{% endfor %}
{% endspaceless %}
{% endblock widget_attributes %}
{% block content %}
    ....
{% endblock %}
Run Code Online (Sandbox Code Playgroud)