2017-03-17 102 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}中访问该新值。 –