symfony twig扩展:'只延伸'

时间:2014-12-02 18:30:54

标签: symfony twig

在树枝上有'extends'标签,如此处所示; http://twig.sensiolabs.org/doc/tags/extends.html#conditional-inheritance

现在,我想做的是该页面中以下示例的内容:

{% extends standalone ? "minimum.html" : "base.html" %}

但是,如果要满足特定条件,我只想从模板扩展而不是扩展2个模板。

现在我尝试了以下内容:

{% extends boolean ? "template.html.twig" : "" %}

{% if boolean %}
    {% extends "template.html.twig" %}
{% endif %}

但是前者给出了一个错误,说它找不到模板(因为“”显然不是一个有效的路径),而后者似乎根本没有做任何事情(或者更确切地说,它会加载一段时间并结束没有显示任何东西)

我已经尝试了其他一些方法,但无法提出任何建议,所以我想在这里问我是否可能遗漏了什么。

预先感谢任何回复:)

编辑:总结我的意图;我想知道我是否可以告诉我的模板只在满足某个条件时延长,否则跳过扩展步骤。 (如果条件然后延伸,则别做什么)

3 个答案:

答案 0 :(得分:3)

Twig文件生成到PHP类中。

extends标签应该是模板中的第一个标签,如:

  • {% extends %}标记将转换为PHP extends,因此子模板将从父模板继承。

  • {% if %}标记在模板类的方法内生成为PHP if,因此您无法使用{% if %}扩展某些类或不

无论如何,您可以扩展来自您的上下文的变量,因此您应该将您的条件放在控制器中。

if ($boolean) {
  $template = 'hello.twig';
} else {
  $template = 'world.twig';
}
$this->render("MyBundle:MyFeature:child.html.twig", array('template' => $template);

然后在child.html.twig

{% extends template %}

答案 1 :(得分:1)

我带来了这个黑客:只添加了内容块的空布局。似乎工作:)我可以从控制器传递变量,页面加载有或没有布局。

<!-- base.html.twig -->
<head>
    ...stuff...
</head>
<body>
    {% block content %}{% endblock %}
</body>

<!-- empty.html.twig -->
{% block content %}{% endblock %}

<!-- some_page.html.twig -->
{% extends boolean ? 'base.html.twig' : 'empty.html.twig' %}
{% block content %}
    Now this is my real content
{% endblock %}

答案 2 :(得分:0)

用纯粹的树枝语言,它可能是这样的:

{% if app.request.pathinfo starts with '/react' %}
    {% set extendPath = "::react_base.html.twig" %}
{% else %}
    {% set extendPath = "CoreBundle::layout.html.twig" %}
{% endif %}
{% extends extendPath %}