有条件的树枝扩展模板

2022-08-30 10:36:23

我将Symfony 2与Twig一起使用,我的问题非常简单:

在视图中,我想根据变量扩展其中一个布局。如果变量是“我想扩展”,如果是“我想扩展”。falseUdoWebsiteBundle::layout.html.twigtrueUdoWebsiteBundle::layout_true.html.twig

这是我尝试的代码:

{% block layout_extender %}

    {% if intro == 'false' %}
        {% extends 'UdoWebsiteBundle::layout.html.twig' %}
    {% else %}
        {% extends 'UdoWebsiteBundle::layout_true.html.twig' %}
    {% endif %}

{% endblock %}

我收到此错误:

禁止在第7行的“UdoWebsiteBundle:home:home.html.twig”中使用多个扩展标签

有没有其他方法可以实现这一目标?


答案 1

试试这个:

{% extends intro == 'false' 
    ? 'UdoWebsiteBundle::layout.html.twig' 
    : 'UdoWebsiteBundle::layout_true.html.twig' %}

从这里获得的想法:http://jorisdewit.ca/2011/08/27/extending-different-layouts-for-ajax-requests-in-twig-symfony2/


答案 2

为了保持整洁,您应该使用控制器中定义的变量作为基本模板来使用Twig动态继承支持:

{% extends parent_template_var %}

如果变量的计算结果为Twig_Template对象,Twig 将使用它作为父模板。

在控制器中定义parent_template_var

if($intro == 'false')
    $parent_template_var = 'UdoWebsiteBundle::layout.html.twig';
}else{
    $parent_template_var = 'UdoWebsiteBundle::layout_true.html.twig';
}
return $this->render('::/action.html.twig', array('parent_template_var' => $parent_template_var ));

http://twig.sensiolabs.org/doc/tags/extends.html


推荐