2014-12-02 86 views
3

在树枝存在“”延伸标签,如在这里找到“仅当”延伸; http://twig.sensiolabs.org/doc/tags/extends.html#conditional-inheritancesymfony的树枝延伸:

现在我要做的就是沿着下面的例子中从该网页线的东西:

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

但不具有2个模板可供扩展,我只是想从如果一个模板扩展具体条件得到满足。

现在,我已经试过的东西,如:

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

和:

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

但前者给出错误说,它不能找到一个模板(因为“”明明心不是一个有效的路径),而后者只是不会出现在所有做任何事情(或者更确切地说,它加载了一段时间,最终没有显示任何东西)

我已经尝试了一些其他的方法,但不能拿出什么,什么o想我会问在这里,如果我可能会失去一些东西。

预先感谢任何答复:)

编辑:为了总结我的意图;我想知道如果我可以告诉我的模板,如果一定条件满足只延长,否则跳过延伸一步。 (如果条件再扩展其他什么都不做)

+0

创建一个空白模板,从一无所有延长? – 2014-12-02 19:24:23

+0

,因为它说“找不到模板”,问题不是出在三元运算符,但在模板的路径。你的父母模板在哪里?下面是关于模板pathes的解释:http://symfony.com/doc/current/book/templating.html#template-naming-locations – 2014-12-02 21:44:55

+0

这个问题是不是在运作的误解的扩展操作或模板寻路,我只是想知道是否可以在有条件扩展的情况下覆盖这个案例(不使用空白模板,因为这很愚蠢)。 还有一些其他的方式,我可以解决这个问题,但它需要额外的模板,我想我会问,如果真的有必要先。 我会重申我的意图。 – Keffertjuh 2014-12-02 23:09:16

回答

3

嫩枝文件生成到PHP类。

的扩展标签应在模板中的第一个标签,如:

  • {% 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 %} 
+0

尽管代码示例并未涵盖我的案例,但我可以从您的回复的第一部分中得出对我的问题的答案;不,只有满足条件才能延长。 我会接受它,感谢您的回复:) – Keffertjuh 2014-12-03 14:29:34

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 %} 
+0

我几乎记得带回点什么的时候我张贴了这个问题,但它是伟大的,你要添加的答案更接近要求它的预期结果。 由于我已经接受了一个答案,我不会改变它,但感谢您发布无论:) – Keffertjuh 2016-02-29 00:57:53

0

在纯枝的语言,也可能是这样的:

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