简体   繁体   中英

Symfony3 form builder form field in span instead of div

I have Symfony3 app and I am making a simple form the code in the twig is as follows

 {{ form_start(edit_form) }}
      {{ form_widget(edit_form) }}
      <input type="submit" value="Edit" />
 {{ form_end(edit_form) }}

Pretty simple. What this code creates is a form and each form field is within it's own <div> which is fine, but if the type is date here is what the generated html looks like

<div>
  <label class="required">Term</label>
    <div id="appbundle_project_term">
      <select id="appbundle_project_term_year" name="appbundle_project[term][year]"></select>
      <select id="appbundle_project_term_year" name="appbundle_project[term][month]"></select>
      <select id="appbundle_project_term_year" name="appbundle_project[term][day]"></select>
    </div>
</div>

What bugs me is the inner div created for the date type field. Is there a way in the FormBuilder to keep the type date but remove this inner div without using javascript to handle it or in the twig template. Simply to say - "inner tag => span". This is pretty generic question as I am looking for a way to usually change the auto generated tags, but if needed here is how this form field is created in form builder

add('term',DateType::class, array(
            'widget' => 'choice',
            'label'=>"Term",
            'data'=>$project->getTerm()
        ))

You can override form rendering, there are few ways.

The simplest one is overriding form theme widget block (in this case date_widget ) and setting form_theme to _self .

Basic example:

{% form_theme form _self %}

{% block date_widget %}
    <span>
        {% if widget == 'single_text' %}
            {{ block('form_widget_simple') }}
        {% else %}
            {# rendering 3 fields for year, month and day #}
            {{ form_widget(form.year) }}
            {{ form_widget(form.month) }}
            {{ form_widget(form.day) }}
        {% endif %}
    </span>
{% endblock %}

{% block content %}
    {# ... form rendering #}

    {{ form_row(form.someDateField) }}
{% endblock %}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM