Аналог компонентов 1C-Bitrix в Symfony?
В Symfony обычно основной код работает в сервисах, а контроллер вызывает нужный сервис. Большой плюс - один раз создал код работы с сущностью, и можно использовать его в любом месте - в любом контроллере, в другом сервисе, в шаблоне. Весь год работы с сущностью - в одном месте (в одном сервисе).
1) Сделать сервис, который строит список последних новостей (этот же сервис использует кэш).
2) Создать Twig расширение, которое добавляет функцию получения списка последних новостей (получение из созданного сервиса). Например, создать функцию "lastNews". Ссылку на сервис новостей настроить через контейнер (в services.yml, или где там делаете сервисы). (ссылки для создания функций: 1, 2)
3) В основном шаблоне (app/Resources/views/layout.html.twig) вызвать созданную функцию. Упрощённо примерно вот так:{# app/Resources/views/base.html.twig #}
<!DOCTYPE html>
<html lang="ru">
    <head>
    </head>
    <body>
        {% block body%}{% endblock %}
        {% block javascripts %}{% endblock %}
    </body>
</html>{# app/Resources/views/layout.html.twig #}
{% extends 'base.html.twig' %}

{% block body %}
<div class="container">
    <div class="sidebar">
        {% block sidebar %}
            <ul class="sidebar-menu">
            {% for item in lastNews() %}
              <li><a href="{{ item.href }}">{{ item.title }}</a></li>
            {% endfor %}
            </ul>
        {% endblock %}
    </div>
    <div class="content">
        {% block content %}
        {% endblock %}
    </div>
</div>
{% endblock %}
В Symfony обычно основной код работает в сервисах, а контроллер вызывает нужный сервис. Большой плюс - один раз создал код работы с сущностью, и можно использовать его в любом месте - в любом контроллере, в другом сервисе, в шаблоне. Весь год работы с сущностью - в одном месте (в одном сервисе).
1) Сделать сервис, который строит список последних новостей (этот же сервис использует кэш).
2) Создать Twig расширение, которое добавляет функцию получения списка последних новостей (получение из созданного сервиса). Например, создать функцию "lastNews". Ссылку на сервис новостей настроить через контейнер (в services.yml, или где там делаете сервисы). (ссылки для создания функций: 1, 2)
3) В основном шаблоне (app/Resources/views/layout.html.twig) вызвать созданную функцию. Упрощённо примерно вот так:{# app/Resources/views/base.html.twig #}
<!DOCTYPE html>
<html lang="ru">
    <head>
    </head>
    <body>
        {% block body%}{% endblock %}
        {% block javascripts %}{% endblock %}
    </body>
</html>{# app/Resources/views/layout.html.twig #}
{% extends 'base.html.twig' %}

{% block body %}
<div class="container">
    <div class="sidebar">
        {% block sidebar %}
            <ul class="sidebar-menu">
            {% for item in lastNews() %}
              <li><a href="{{ item.href }}">{{ item.title }}</a></li>
            {% endfor %}
            </ul>
        {% endblock %}
    </div>
    <div class="content">
        {% block content %}
        {% endblock %}
    </div>
</div>
{% endblock %}