Вы можете создать собственное расширение ветки, как описано здесь: https://symfony.com/doc/current/templating/twig_extension.html
Там вы можете зарегистрировать пользовательскую функцию веточки, например:
public function getFunctions()
{
return array('renderNavigation' => new TwigFunction(
'renderNavigation',
array($this, 'renderNavigation'),
array('needs_environment' => true, 'is_safe' => array('html'))
);
}
public function renderNavigation(Environment $twig)
{
/* ... */
return $twig->render(/* ... */);
}
Затем вы можете использовать функцию в каждом шаблоне, как {{ renderNavigation() }}
Поскольку расширение Twig само по себе является сервисом, вы можете добавить любой другой сервис, который вам нужен (например, RequestStack, EntityManager и т. Д.), И даже кэшировать дорогостоящие операции в пределах расширения, если вам нужно, чтобы функция выполнялась более одного раза.