2014-12-02 89 views
3

在樹枝存在「」延伸標籤,如在這裏找到「僅當」延伸; http://twig.sensiolabs.org/doc/tags/extends.html#conditional-inheritancesymfony的樹枝延伸:

現在我要做的就是沿着下面的例子中從該網頁線的東西:

{% extends standalone ? "minimum.html" : "base.html" %} 

但不具有2個模板可供擴展,我只是想從如果一個模板擴展具體條件得到滿足。

現在,我已經試過的東西,如:

{% extends boolean ? "template.html.twig" : "" %} 

和:

{% if boolean %} 
    {% extends "template.html.twig" %} 
{% endif %} 

但前者給出錯誤說,它不能找到一個模板(因爲「」明明心不是一個有效的路徑),而後者只是不會出現在所有做任何事情(或者更確切地說,它加載了一段時間,最終沒有顯示任何東西)

我已經嘗試了一些其他的方法,但不能拿出什麼,什麼o想我會問在這裏,如果我可能會失去一些東西。

預先感謝任何答覆:)

編輯:爲了總結我的意圖;我想知道如果我可以告訴我的模板,如果一定條件滿足只延長,否則跳過延伸一步。 (如果條件再擴展其他什麼都不做)

+0

創建一個空白模板,從一無所有延長? – 2014-12-02 19:24:23

+0

,因爲它說「找不到模板」,問題不是出在三元運算符,但在模板的路徑。你的父母模板在哪裏?下面是關於模板pathes的解釋:http://symfony.com/doc/current/book/templating.html#template-naming-locations – 2014-12-02 21:44:55

+0

這個問題是不是在運作的誤解的擴展操作或模板尋路,我只是想知道是否可以在有條件擴展的情況下覆蓋這個案例(不使用空白模板,因爲這很愚蠢)。 還有一些其他的方式,我可以解決這個問題,但它需要額外的模板,我想我會問,如果真的有必要先。 我會重申我的意圖。 – Keffertjuh 2014-12-02 23:09:16

回答

3

嫩枝文件生成到PHP類。

的擴展標籤應在模板中的第一個標籤,如:

  • {% extends %}標籤將被轉換爲PHP extends這樣子模板將從父模板繼承。

  • {% if %}標籤作爲PHP if生成模板類的方法裏面,所以你不能使用{% if %}延長一些類與否。

無論如何,你可以擴展您的到來背景下的變量,所以你應該把你的病情的控制。

if ($boolean) { 
    $template = 'hello.twig'; 
} else { 
    $template = 'world.twig'; 
} 
$this->render("MyBundle:MyFeature:child.html.twig", array('template' => $template); 

然後在child.html.twig

{% extends template %} 
+0

儘管代碼示例並未涵蓋我的案例,但我可以從您的回覆的第一部分中得出對我的問題的答案;不,只有滿足條件才能延長。 我會接受它,感謝您的回覆:) – Keffertjuh 2014-12-03 14:29:34

1

我帶着這個技巧:加空的佈局僅與內容塊。似乎是工作:)我可以從控制器傳遞變量和頁面加載或不加布局。

<!-- base.html.twig --> 
<head> 
    ...stuff... 
</head> 
<body> 
    {% block content %}{% endblock %} 
</body> 

<!-- empty.html.twig --> 
{% block content %}{% endblock %} 

<!-- some_page.html.twig --> 
{% extends boolean ? 'base.html.twig' : 'empty.html.twig' %} 
{% block content %} 
    Now this is my real content 
{% endblock %} 
+0

我幾乎記得帶回點什麼的時候我張貼了這個問題,但它是偉大的,你要添加的答案更接近要求它的預期結果。 由於我已經接受了一個答案,我不會改變它,但感謝您發佈無論:) – Keffertjuh 2016-02-29 00:57:53

0

在純枝的語言,也可能是這樣的:

{% if app.request.pathinfo starts with '/react' %} 
    {% set extendPath = "::react_base.html.twig" %} 
{% else %} 
    {% set extendPath = "CoreBundle::layout.html.twig" %} 
{% endif %} 
{% extends extendPath %}