我在控制器中定义变量并将其传递给模板但在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
答案 0 :(得分:1)
我遇到了像koral一样的问题,尽管Besnik对条件陈述给出的解决方案对我不起作用。我花了一段时间才弄清楚原因是我使用了条件扩展{% extend ? : %}
加上表单主题{% form_theme form _self %}
的组合。
因此,在实现给出的解决方案后,我仍然收到一个异常,说var app
(或者在我的情况下是var vars
)是未定义的。但是,对于任何面临同样问题的人:有一个解决方案:
创建一个Twig功能,您可以在其中添加所有逻辑和后勤,并在Twig模板中使用它:
{% extends parent_template() %}
答案 1 :(得分:0)
这将有效:
{% set layout = app.request.isXmlHttpRequest ? '::base-ajax.html.twig' : '::base.html.twig' %}
{% extends layout %}