Вы находитесь на неправильном пути здесь.
Вы можете делать то, что пытаетесь сделать, используя новые теги, но это кажется ненужным.
Просто создайте новую функцию и вызовите ее:
{{ latest_news(5) }}
Пример кода функции с отображением другого шаблона
class MyTwigExtension extends Twig_Extension
{
public function latest_news ($limit)
{
$templateVariables = array(
'latestNews' => SomeClass::getLatestNews($limit)
);
// you would want to make this in a factory / a separate view class
$loader = new Twig_Loader_Filesystem('/your/template/dir');
$twig = new Twig_Environment($loader);
// display actual sub-template
$template = $twig->loadTemplate('your_existing_template.twig');
return $template->render($templateVariables);
}
public function getFunctions ()
{
return array(
'latest_news' => new Twig_Function_Method($this, 'latest_news', array('is_safe' => array('html')))
);
}
public function getName ()
{
return 'my-twig-extension';
}
}
Теперь вам нужно создать все свои экземпляры Twig, как это:
$loader = new Twig_Loader_Filesystem('/your/template/dir');
$twig = new Twig_Environment($loader);
$twig->addExtension(new MyTwigExtension());
Поэтому я думаю, что вы можете захотеть создать фабрику, которая создаст для вас экземпляр (со всеми зависимостями от расширений), или создать собственный класс View
, который делает все это внутренне.