Twig(Symfony2)在'extend'块中没有看到变量

时间:2012-07-07 09:27:04

标签: inheritance symfony twig

我在控制器中定义变量并将其传递给模板但在extend块中不可见。重要的控制器代码是:

        $response['html'] = $this->renderView(
            'AldenXyzBundle:Profile:edit_ajax.html.twig', array(
                'isXmlHttpRequest' => $request->isXmlHttpRequest(),
            )
        );

和Twig模板

{% extends isXmlHttpRequest ? '::base-ajax.html.twig' : '::base.html.twig' %}

{% block content %}
...
{% endblock %}

我在模板

时遇到异常Variable "isXmlHttpRequest" does not exist in ...
{% extends '::base-ajax.html.twig' %}

{% block content %}
{{ dump(isXmlHttpRequest) }}
...
{% endblock %}

运行良好并显示正确的$isXmlHttpRequest值。

我也直接在模板中试过:

{% extends app.request.isXmlHttpRequest ? '::base-ajax.html.twig' : '::base.html.twig' %}

但是有一个例外app is undefined

我正在使用symfony v2.0.15和twig v1.8.2

2 个答案:

答案 0 :(得分:1)

我遇到了像koral一样的问题,尽管Besnik对条件陈述给出的解决方案对我不起作用。我花了一段时间才弄清楚原因是我使用了条件扩展{% extend ? : %}加上表单主题{% form_theme form _self %}的组合。

因此,在实现给出的解决方案后,我仍然收到一个异常,说var app(或者在我的情况下是var vars)是未定义的。但是,对于任何面临同样问题的人:有一个解决方案:

创建一个Twig功能,您可以在其中添加所有逻辑和后勤,并在Twig模板中使用它:

{% extends parent_template() %}

关于这个问题有一个很好的post。另请参阅symfony论坛中提到此问题的post

答案 1 :(得分:0)

这将有效:

{% set layout = app.request.isXmlHttpRequest ? '::base-ajax.html.twig' : '::base.html.twig' %}
{% extends layout %}