2014-02-11 54 views
0

我已經將我的佈局和模板分割爲幾個部分,主要是因爲舊的Symfony1習慣。枝條塊間接延伸和追加

文件layout.html.twig

... 
<body> 
    {{ include("ABCBundle:Partials:breadcrumbs.html.twig") }} 
    {% block body %}{% endblock %} 
</body> 
... 

文件breadcrumbs.html.twig

<div class="abc"> 
    {% block breadcrumbs %} 
    <a href="#">Home</a> 
    {% endblock %} 
</div> 

文件show.html.twig

{% extends "ABCBundle::layout.html.twig" %} 
{% block breadcrumbs %} 
    {{ parent() }} 
    abc 
{% endblock %} 

{% block body %} 
    (something something) 
{% endblock %} 

有趣的是,當我渲染show.html.twig,我可以把數據轉化爲body塊,和一切都很克工作正常,但我不能做任何事情與breadcrumbs塊。無論我做什麼 - 在該塊內寫入內容或致電parent(),什麼都不發生,只有來自breadcrumbs.html.twig的內容正在呈現。關於調用parent()以及與擴展塊相關的任何其他錯誤,也沒有錯誤。

回答

2

我認爲你應該使用{% include "..." %}而不是{{ include("...") }}

按照樹枝文檔中,{% include %}tag「包括模板,並返回該文件的呈現的內容到當前的命名空間」裏爲包括function「回報模板」

的呈現的內容(含義包括函數只是返回渲染的內容,其中的標籤添加內容到當前的命名空間,其中將包括您所定義的塊)

+0

感謝您的有用信息!我相信這將在未來的任務中變得非常有用,但不幸的是並沒有解決我的問題。 – ex3v

+0

如果您刪除對parent()的調用,它是否會顯示show.html.twig中的任何內容? – Pierre

+0

不幸的是沒有。看起來無論我在'show.html.twig'的'breadcrumbs'內寫入什麼內容 - 總是顯示'breadcrumbs.html.twig'的默認內容。 – ex3v

0

找到解決方案。

它看起來就像你不能延長這個佈局擴展包含在佈局的include塊,從模板:

[partial.html.twig] --- [  layout.html.twig  ] --- [ template.html.twig ] 
{% block abc %}  {% include 'partial.html.twig' %} {% extends layout.html.twig %} 
                  {% block abc%} aaa {%endblock %} 

您必須執行一個小黑客,包括增加額外的內容佈局和替換原始塊partial.html.twig有條件。更多此處:Overriding blocks within included Twig templates