Ignas Damunskis Ignas Damunskis - 2 months ago 19
Twig Question

SonataAdminBundle templates - list and show fields template content duplication

My list and show fields contain the same content, but due the extending of

base_list_field
and
base_show_field
templates I have to create two separate templates.

list/location.html.twig:

{% extends 'SonataAdminBundle:CRUD:base_list_field.html.twig' %}

{% block field %}
{{ object.getCity }}, {{ object.getCountry.getName }}
{% endblock %}


show/location.html.twig:

{% extends 'SonataAdminBundle:CRUD:base_show_field.html.twig' %}

{% block field %}
{{ object.getCity }}, {{ object.getCountry.getName }}
{% endblock %}


As you can see huge part of code is duplicated. Is there a way to check the page I am currently in in twig and then extend certain base template? In this case I would be able to use one file instead of two for same content.

Answer

In twig it's possible to extend/include a dynamic template :

{# do test here on which page you are or pass through controller #}
{% if true %}
    {% set template = 'SonataAdminBundle:CRUD:base_show_field.html.twig' %}
{% else %}
   {% set template = 'SonataAdminBundle:CRUD:base_list_field.html.twig' %
{% endif %}
{% extends template %}

{% block field %}
    {{ object.getCity }}, {{ object.getCountry.getName }}
{% endblock %}

(edit) if you don't want the hardcoded if I would pass the template variable through the controller and change the twig template to something like

{% extends template|default('SonataAdminBundle:CRUD:base_show_field.html.twig') %}
Comments