2016-12-06 45 views
1

嵌套枝條嵌入時遇到了一些問題,特別是當兩個嵌入具有相同的變量定義。枝條嵌入和變量範圍

一個例子:從與一個字段的表單佈局的簡單代碼摘錄,一些行和輸入元件(除去爲了清楚起見一些變量):

{% embed 'components/frmGroup' with {'id':'myFieldset'} %} 
    {% block main %} 
     {% embed 'components/frmRow' with {'id':'mySpecialFormRow'} %} 
      {% block main %} 
       {% include 'components/inpText' %} 
       ... 
      {% endblock %} 
     {% endembed %} 
     {% embed 'components/frmRow' %} 
      {% block main %} 
       {% include 'components/inpText' %} 
       ... 
      {% endblock %} 
     {% endembed %} 
    {% endblock %} 
{% endembed %} 

正如你可以看到,這兩個frmGroup(字段集)和frmRow(row)組件可以採用變量id。第一個frmRow嵌入很好,因爲它定義了自己的id,第二個frmRow不需要特定的id(因此沒有定義一個),問題就出現了。但是當我查看輸出的html代碼時,我發現formrow攜帶了#myFieldset,這是在frmGroup嵌入中設置的id。不是我想要完成:)

我試過玩弄「唯一」關鍵字,但那給了我一些非常奇怪的結果。我可以使用不同的變量名稱(frmGroupId和frmRowId),但感覺不好(並且會產生混亂),我也可以在第二個frmRow上顯式地定義和清空id,但是我必須記住哪些變量需要定義嵌套嵌入,也不漂亮。

那麼我該如何解決這個問題(並且可以在Twig中解決)?

+0

只需傳遞'null' id並相應地進行測試? [twigfiddle](https://twigfiddle.com/ln6dp0) – DarkBee

+0

是的,但這意味着: 1:你總是知道上下文......如果你把一組嵌入並移動到不同的上下文,再次打破。 2:將一個變量添加到最後嵌入的內容可能會破壞整個項目中的所有嵌套嵌入。 3:很多額外的代碼(每個嵌套嵌入需要變量重置) 這是一個「可以使其工作」解決方案,但我希望有更強大的功能:) –

+0

評論這個策略對我來說有點困難。我通常將一個對象或一組對象傳遞給我的視圖。在我的情況下,您的第一個ID可能屬於某個類別,該類別使產品的代碼更容易維護,因爲我幾乎沒有碰撞變量{{category.getId()}} {%product {product}} {{product。 getId()}} {%endfor%}' – DarkBee

回答

0

我想你的例子,我有完全正常的結果:

{% set id = "1" %} 
{# id is 1 #} 
{% embed "_test.html.twig" with { id: "2"} only %} 
    {# id is 2 for the scope #} 
    {% block main %} 
     {% embed "_test.html.twig" with { id: "3"} %} 
      {# id is 3 for the scope #} 
     {% endembed %} 
     {% embed "_test.html.twig" %} 
      {# id value is still 2 #} 
     {% endembed %} 
    {% endblock %} 
{% endembed %} 
{% embed "@_test.html.twig" %} 
    {# id value is 1 #} 
{% endembed %} 

隨着_test.html.twig:

{% block main %} 
{{ id|default('null') }} 
{% endblock %} 

它返回

唯一想我能想到的它讓你使用臨時變量:

{% embed "@InddigoMain/_test.html.twig" with { id: "2"} %} 
    {% block main %} 
     {% embed "@InddigoMain/_test.html.twig" with { id: "3"} %} 
     {% endembed %} 
     {% set temp = id %} 
     {% set id = null %} 
     {% embed "@InddigoMain/_test.html.twig" %} 
     {% endembed %} 
     {% set id = temp %} 
    {% endblock %} 
{% endembed %} 
{% embed "@InddigoMain/_test.html.twig" %} 
{% endembed %} 

它返回

3空1

我去throught樹枝捆綁和我不不認爲它存在。