2017-03-17 21 views
3

嫩枝:傳遞塊之間的可變數據在樹枝

{% set var = 'apple' %} 

{% block A %} 
    {{ var }} {# This prints apple #} 
{% endblock %} 

{% block B %} 
    {% set var = 'banana' %} 
    {{ var }} {# This prints banana #} 
{% endblock %} 

{% block C %} 
    {{ var }} {# This prints apple, but I want it to print banana #} 
{% endblock %} 

是否有任何的方式來獲得在塊C中的改變的值,從塊B?

+0

例如,在PHP中,我可以這樣做:'$ var = 0; if(true){$ var = 2;} echo $ var; #value == 2 not 0' –

+0

枝條塊有自己的範圍。所以如果你想讓C塊打印'banana',你必須重寫塊B外面的'var'。 – mickdev

+0

另外,看看twig中的'with'關鍵字:http://twig.sensiolabs.org/doc/ 2.x/tags/with.html – Jan

回答

1

你能砍它,並在需要的塊設置的值在$_SESSION變量和訪問:

{% set var = 'apple' %} 

{% block A %} 
    {{ var }} {# This prints apple #} 
{% endblock %} 

{% block B %} 
    {% set var = 'banana' %} 
    {{ var }} {# This prints banana #} 
    {{ app.session.set('var', var) }} 
{% endblock %} 

{% block C %} 
    {{ var }} {# This prints apple #} 
    {% set var = app.session.get('var') %} 
    {{ var }} {# This prints banana #} 
{% endblock %} 

這裏是twigfiddle給你看。

或者在您提到的評論部分中,您想要訪問已在{% block body %}中設置的{% block javascripts %}中的變量。你可以破解它並將你的js代碼移動到你的body block中。但我更喜歡將我的js代碼保存在一個地方。

{% set var = 'apple' %} 

{% block A %} 
    {{ var }} {# This prints apple #} 
{% endblock %} 

{% set var = 'banana' %} 
{% block B %} 
    {{ var }} {# This prints banana #} 
`<script>{{ var }}</script>` {# Bring your js code in the required block#} 
{% endblock %} 
1

你必須做一套塊外,像這樣:

{% set var = 'apple' %} 

{% block A %} 
    {{ var }} {# This prints apple #} 
{% endblock %} 

{% set var = 'banana' %} 
{% block B %} 
    {{ var }} {# This prints banana #} 
{% endblock %} 

{% block C %} 
    {{ var }} 
{% endblock %} 

這裏是twigfiddle給你看。

+0

我想要塊C中的變化值,即塊C,即香蕉。 我遇到的實際問題是我有一個{body block},我在其中設置了該值,並且想要在{javascript block}中訪問該新值。 –