Search code examples
symfonytemplatestwigsonata-admin

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.


Solution

  • 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') %}