2017-03-09 104 views
2

我想在我的佈局新值中嵌入樣式和腳本塊,但是從嵌入塊注入。 當然它會拋出錯誤Calling "parent" outside a block is forbidden.。 有什麼解決方法嗎?從嵌入模板擴展父塊

layout.html.twig:

<!DOCTYPE html> 
<html> 
    <head> 
     {% block style %} 
      <link rel="stylesheet" href="foo.css"> 
     {% endblock %} 
    </head> 
    <body> 

     {% block content "" %} 

     {% block scripts %} 
      <script src="foo.js"></script> 
     {% endblock %} 

    </body> 
</html> 

list.html.twig:

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

{% block content %} 
    {% embed datatable.html.twig %} 
     {% block tbody %} 
      <tr> 
       <td>my awesome table</td> 
      </tr> 
     {% endblock %} 
    {% endembed %} 
{% endblock %} 

datatable.html.twig:

<table id="myDatatable"> 
    <tbody> 
     {% block tbody "" %} 
    </tbody> 
</table> 

{% block styles %} 
    {{ parent() }} 
    <link rel="stylesheet" href="dataTables.css"> 
{% endblock %} 

{% block scripts %} 
    {{ parent() }} 
    <script src="dataTables.js"></script> 
{% endblock %} 

(我不能/不會使用list.html.twig內的scriptsstyles塊。它們是數據表模板的一部分,它不會在list.html.twig中定義主題)。 可悲的是我不能使用use,因爲這個功能不支持動態屬性,只有字符串。

From the doc

由於使用語句獨立地傳遞給模板的上下文的解決,模板引用不能是表達式。

+0

包括/嵌入功能無法改變/改變從它被從 – DarkBee

回答

0

正如在評論中所說的,包含/嵌入不能改變其包含器中的塊。 這就是說有一個可用的擴展可以解決你的問題。

Deferred Twig Extension可以發現here

基本上節點推遲一個所述塊的執行。 通過這種方式,您可以創建一個包含所有JavaScript鏈接並輸出它們的變量。這可以在github上的advanced示例中看到。

學分Eugene Leonovich使這次延長

+0

包括模板塊似乎是進入了一個有趣的方式,在一個完美的世界,我寧願不使用任何捆綁 – AlexisWbr