2011-08-22 57 views
0

是否可以在樹枝中獲取佈局中子模板的名稱? 對於實例調用時:樹枝主佈局中的模板名稱

$app['twig']->render('index.twig'); 

然後在layout.twig,這是主要的佈局,應該問:

if page is index.twig => include this javascript 

我能在渲染調用與其他變量做到這一點,但這似乎是臃腫的,因爲模板名稱會顯示它已經。

+0

我認爲這個問題幾乎相同:https://github.com/fabpot/Twig/issues/350 – ivoba

回答

4

你正在看着這個錯誤的方式。試想一下,如果你有很多的看法,那麼你必須做的每一個:

{% if _self.getTemplateName() == 'index.twig' %} 
    <script src="{{ asset('somescript1') }}"></script> 
{% endif %} 
{% if _self.getTemplateName() == 'members.twig' %} 
    <script src="{{ asset('somescript2') }}"></script> 
{% endif %} 
{% if _self.getTemplateName() == 'news.twig' %} 
    <script src="{{ asset('somescript3') }}"></script> 
{% endif %} 
... 

我發現這種方法非常糟糕。你可以做什麼,在你的主要佈局文件(讓我們假設其在這個例子中「layout.html.twig」)是使一個塊:

{% block javascripts %} 
{% endblock %} 

然後,在視圖文件:

{% extends 'AcmeHelloBundle::layout.html.twig' %} 

.... 
{% block javascripts %} 
<script src="asset('index.js')"></script> 
{% endblock %} 

基本上,你用新內容覆蓋佈局文件中的塊。如果你有你的「layout.html.twig」裏的任何東西(例如像jQuery的),你也必須調用父():

{% extends 'AcmeHelloBundle::layout.html.twig' %} 

.... 
{% block javascripts %} 
{{ parent() }} 
<script src="asset('index.js')"></script> 
{% endblock %} 

parent()只是確保所有的內容從複製父塊也是如此。

+3

用法更改爲'_self.getTemplateName()'。 – Sithu

+0

請注意,這會返回一個'Twig_Markup'對象。如果你嚴格需要一個字符串,那麼使用'_self.getTemplateName().__ toString'。 – Alex