Fisher
Fisher

Reputation: 1794

Customize form_row for different form types

I want to set different form_row layout for different form type. I found in templates block named "choice_widget_collapsed", but it render only select tag with options.

I cannot find where this block is being used. Actually it seems that it is rendered instead of form_widget block. I suppose there is somewhere switch/if structure which checks form type and renders appropriate block, but i dont know where to find this switch, or dont know how to check input type inside form_row block.

I know that block type can be found inside form.vars.block_prefixes array, but this sux, because its position may change in the future as it was already.

So the question is: how can i make form_row display different thing depending on form field type?

Upvotes: 3

Views: 1170

Answers (1)

Alessandro Lai
Alessandro Lai

Reputation: 2274

You should override the normal block in a theme of yours. This block should work like this:

{% block form_appropriate_block %}
    {% spaceless %}
        {% if form.vars.widget = 'myIntendedWidgetType' %}
            [yourTemplate]
        {% else %}
            {{ parent() }}
        {% endif %}
    {% endspaceless %}
{% endblock form_appropriate_block %}

And then, in your template, activate your theme using:

{% form_theme form 'MyBundle:Form:formTheme.html.twig' %}

In this way, your form theme is used only when needed, and if the type is not the one you want, it falls back to the normal behaviour.

Upvotes: 1

Related Questions