2013-08-07 126 views
0

我正在使用樹枝,並遇到includeextends的問題。包含並擴展相同的文件?

我有一個文件header.html.twig,我包括index.html.twig。這工作正常。

但是,我也試圖用index.html.twig上的extends來覆蓋header.html.twig文件的一部分。我想出的代碼是:

<!-- index.html.twig --> 
{% include '::header.html.twig' %} 
    {% extends '::header.html.twig' %} 
    {% block head %} 
     <li class="active"><a href="#login">Login</a></li> 
    {% endblock %} 

然而,這個代碼拋出異常「擴展另外一個不能有身體模板......」

我怎樣才能解決這個問題?

+0

你能提供一些細節嗎? 'header.html.twig'看起來像什麼?你到底想要覆寫什麼? – SirDerpington

回答

2

您只能在擴展另一個模板的模板中使用{% block... %} {% endblock %}標記。

在你的情況,如果我得到你正在努力實現正確的東西,你可以定義header.html.twig空塊(開頭),並覆蓋在index.html.twig該塊與

{% block foo %} 
    {% include "header.html.twig" %} 
{% endblock %} 
1

如果你正在做任何塊以外的事情,這些東西被認爲是你的樹枝文件的主體。正如例外清楚地表明的那樣,如果您要擴展樹枝模板,則需要覆蓋擴展文件中包含的某些塊,而不需要任何主體。

之前您應該使用{% extends %}標籤,因爲擴展已包含內容。該包裝的「base.html.twig」文件就是一個很好的例子:你把將在base.html.twig文件到處被使用在應用程序代碼:

<!DOCTYPE html> 
<html> 
    <head> 
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
     <title>{% block title %}Welcome!{% endblock %}</title> 
     {% block stylesheets %}{% endblock %} 
     <link rel="shortcut icon" href="{{ asset('favicon.ico') }}" /> 
    </head> 
    <body> 
     {% block body %}{% endblock %} 
     {% block javascripts %}{% endblock %} 
    </body> 
</html> 

對於你的情況,你可以添加一個{% block head %}{% endblock %}在body block之上,然後在你的index.html.twig文件中,你會覆蓋這個塊來完成它。

{% extends '::base.html.twig' %} 
{% block head %} 
    <li class="active"><a href="#login">Login</a></li> 
{% endblock %} 

這將最終輸出:

<!DOCTYPE html> 
<html> 
    <head> 
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
     <title>Welcome!</title> 
     <link rel="shortcut icon" href="/favicon.ico" /> 
    </head> 
    <body> 
     <li class="active"><a href="#login">Login</a></li> 
    </body> 
</html> 

結論

extendsinclude之間的區別是,你能夠從擴展文件覆蓋塊,在那裏你可以」 t使用include包括它。