包括延伸

问题描述:

我渲染Twig模板如下嫩枝模板:包括延伸

$this->render('base.html.twig'); 

这个Twig模板的内容(简体)看起来如下:

{% block headers %} 
... 
{% endblock %} 
{% block pagecontent %} 
... 

    {# I want to include another template (A) here #} 
    {# I want to include another template (B) here #} 

{% endblock %} 
{% block footers %} 
... 
{% endblock %} 

我有另一个Twig模板,我没有渲染,但我想包括在上面的模板(我已经放置了我的Twig评论)。内容如下:

{% extends '::base' %} 
{% block headers %} 
{{ parent() }} 
{% endblock %} 
{% block pagecontent %} 
{{ parent() }} 
... 
{% endblock %} 

我想最终呈现的base.html.twig内几个Twig模板。

正是我试图做到的,如果是的话,我该如何实现它?

你只需要渲染子模板(扩展名为base.html.twig的那个)。

变化控制器:

$this->render('child_template_extending_base.html.twig'); 

替换child_template_extending_base与你的真实模板名称。

您也可以embed模板中的另一个控制器的看法与此代码:

{{ render(controller(
    'AppBundle:Article:recentArticles', 
    { 'max': 3 } 
)) }} 

了解更多关于此功能在这里:http://symfony.com/doc/current/book/templating.html#embedding-controllers

+0

是的,这将工作,但我想最终在'base.html.twig'中包含多个附加模板。应该可能已经明确表示了。 – Unflux

+0

这是有效的,但只有当我不重写'extends''Twig'模板中的'block'部分时才有效。 – Unflux

+0

yes - 'render'不能覆盖主题的任何部分 - 它只会在您调用它的地方注入。阅读更多关于继承这里:http://twig.sensiolabs.org/doc/tags/extends.html –

base.html.twig

{% block headers %} 
... 
{% endblock %} 
{% block pagecontent %} 
... 

{# I want to include another template (A) here #} 
{# I want to include another template (B) here #} 

{% endblock %} 
{% block footers %} 
... 
{% endblock %} 

你控制器:

$this->render('base.html.twig'); 

通常情况下,$ this-> render('view.html.twig');只接受一个树枝。 如果你想有几个模板,你可以这样建立它:

view.html.twig

{% extends '::base' %} 
{% block pagecontent %} 
    {# Controller function with template 1 #} 
    {{ render(controller('AppBundle:Article:recentArticles',{ 'max': 3 })) }} 
    {# Controller with template 2 #} 
    {{ render(controller('AppBundle:Article:relatedArticles',{ 'max': 4 })) }} 
{% endblock %} 

另一种可能的解决方案是: 你可以打破一个块成若干块。