Twig 1.* используется как отдельная библиотека (не в составе symfony или типа того).
Есть определённый шаблон, который подключается в других шаблонах. Этот включаемый шаблон требует несколько переменных. Как мне указать их один раз, а не передавать каждый раз из контроллера? Наверное на примерах будет понятнее.
Для тех, кто знаком с Laravel:
Мне нужен аналог \View::composer();
Допустим делаем интернет-магазин, несколько страниц, у большинства есть шапка и подвал.
В шапке нам нужно выводить список категорий.
Примерно так происходит рендер в контроллере:
spoiler
protected function render(string $view, array $params = [])
{
$loader = new FilesystemLoader(base_path('/resources'));
$twig = new Environment($loader, ['cache' => base_path('/var/cache/twig'), 'debug' => true]);
$content = $twig->render($view, $params);
return Response::create($content);
}
Есть шаблон 'template.twig'
spoiler
<!DOCTYPE html>
<html lang="ru">
<head>
<title>Интернет-магазин</title>
</head>
<body>
<header>
<ul>
{% for category in categories %}
<li><a href="{{ category.url}}">{{ category.name}}</a></li>
{% endfor %}
</ul>
</header>
<div class="content">
{% block content %}{% endblock %}
</div>
<footer></footer>
</body>
</html>
И есть несколько шаблонов, которые его расширяют.
spoiler
{% extends "template.twig" %}
{% block content %}
Тут какой-то контент, у каждой страницы свой
{% endblock %}
Нужно сделать так, чтобы переменная categories была всегда доступна в template.twig