我的twig扩展代码如下
/**
* @return array
*/
public function getFunctions()
{
return [
new \Twig_SimpleFunction('bsPanelTitle', array($this, 'bsPanelTitle')),
];
}
/**
* @param $headline
* @return string
*/
public function bsPanelTitle($headline)
{
$loader = new \Twig_Loader_Filesystem(__DIR__ . '/../Resources/views/Common/Placeholder');
$twig = new \Twig_Environment($loader);
return $twig->render('xtitle.html.twig', ['headline' => $headline]);
}
我的问题是:
是否有更好的方法从Twig扩展功能到达AppBundle / Resources / views / Common / Placeholder文件夹?
答案 0 :(得分:1)
如评论中所述,使用include()将模板包含在您需要的任何位置。
例如,以下内容与您尝试实现的内容相同:
应用程序/资源/视图/ xtitle.html.twig:
{% stylesheets '@AppBundle/Resources/css/bootstrap.css' %}
<link rel="stylesheet" href="{{ asset_url }}" />
{% endstylesheets %}
{# Other Markup Here #}
在模板中,只需致电:
{% include 'xtitle.html.twig' %}
这将包括模板以及引导程序样式和该模板中的任何其他内容。
答案 1 :(得分:1)
由于这个问题用symfony2标记,我假设你确实在谈论symfony2项目,如果是这种情况你可以用twig注册自己的命名空间,使用twig配置,如下所示:
twig:
# ...
paths:
"%kernel.root_dir%/../pathFromProjectRootToPlaceholder/Placeholder": placeholder
这会为文件夹pathFromProjectRootToPlaceholder / Placeholder创建一个别名,然后您可以使用它来渲染模板,如下所示:
//from controller
return $this->render(
'@placeholder/index.html.twig',
$data
);
OR
{# from twig template #}
{% include '@placeholder/index.html.twig' %}
您可以为同一个别名添加多个路径,但有关更多信息,请查看symfony 2网站上的官方食谱: http://symfony.com/doc/current/cookbook/templating/namespaced_paths.html
希望这有帮助,
Alexandru Cosoi