在树枝上有'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 %}
但是前者给出了一个错误,说它找不到模板(因为“”显然不是一个有效的路径),而后者似乎根本没有做任何事情(或者更确切地说,它会加载一段时间并结束没有显示任何东西)
我已经尝试了其他一些方法,但无法提出任何建议,所以我想在这里问我是否可能遗漏了什么。
预先感谢任何回复:)
编辑:总结我的意图;我想知道我是否可以告诉我的模板只在满足某个条件时延长,否则跳过扩展步骤。 (如果条件然后延伸,则别做什么)
答案 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 %}