2

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

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

和树枝模板

{% 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

4

2 回答 2

1

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

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

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

{% extends parent_template() %}

有一篇关于这个问题的优秀帖子。另请参阅symfony 论坛中提到该问题的这篇文章。

于 2016-02-09T08:50:43.687 回答
0

这将起作用:

{% set layout = app.request.isXmlHttpRequest ? '::base-ajax.html.twig' : '::base.html.twig' %}
{% extends layout %}
于 2012-07-11T21:02:13.833 回答