лейаут состоит из 4 частей: header, content, sidebar, footer
данные для серединки (content,sidebar) планирую чтоб возвращал контроллер
public function indexAction()
{
...
return $this->render($tpl, [
"content" => $this->get('service')->getDataForCurrentPage(),
"sidebarContent" => $this->get('service')->getSidebar3()
])
}
для динамические данных хедера и футера вижу следующие варианты:
1. через Sub-request {{ render(controller( 'controller:headerAction' )) }}
2. через service и расширение твиг
<div class="wrapper">
{% for item in getDataForHeader() %}
<div class=" .. ." >
{{ item.render() }}
</div>
{% endfor %}
</div>
3. достать одним вызовом данные для всего
{% set layoutData = getLayoutData() %}
.....
{% for item in layoutData.header %}
...
{% endfor %}
.......
.....
{% for item in layoutData.footer %}
some rendering
{% endfor %}
{ endfor %}
4. так же как и 3 только при загрузке бандла - загнать данные сразу в глобальную переменную твиг вместо вызова {% set layoutData = getLayoutData() %}
5. так же как 4 только пометить несколько сервисов тегами, каждый из которых загонит данные в лейаут
как лучше и гибче все это сделать?
ПС. эта задача актуальна для абсолютно любого проекта и будет очень странно если будет 100 просмотров этой темы и 5 ответов. как это делают остальные 95 человек - тоже интересно