Symfony Twig扩展渲染视图

时间:2016-05-06 08:22:19

标签: symfony twig render

我的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文件夹?

2 个答案:

答案 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