2016-02-26 155 views
1

我渲染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模板。

正是我試圖做到的,如果是的話,我該如何實現它?

回答

3

你只需要渲染子模板(擴展名爲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 –

0

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 %} 

另一種可能的解決方案是: 你可以打破一個塊成若干塊。