Twig扩展模板的条件

Dan*_*nau 42 php layout templates symfony twig

我使用Symfony 2和Twig,我的问题很简单:

在视图中,我想基于变量扩展其中一个布局.如果变量是false我想要扩展UdoWebsiteBundle::layout.html.twig,如果true我想扩展UdoWebsiteBundle::layout_true.html.twig.

这是我试过的代码:

{% block layout_extender %}

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

{% endblock %}
Run Code Online (Sandbox Code Playgroud)

我收到此错误:

第7行的"UdoWebsiteBundle:home:home.html.twig"中禁止使用多个扩展标记

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

Mae*_*lyn 53

试试这个:

{% extends intro == 'false' 
    ? 'UdoWebsiteBundle::layout.html.twig' 
    : 'UdoWebsiteBundle::layout_true.html.twig' %}
Run Code Online (Sandbox Code Playgroud)

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


sva*_*ssr 16

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

{% extends parent_template_var %}
Run Code Online (Sandbox Code Playgroud)

如果变量求值为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 ));
Run Code Online (Sandbox Code Playgroud)

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


小智 6

官方文件中回答:

条件继承

由于父模板的名称可以是任何有效的Twig表达式,因此可以使继承机制成为条件:

{% extends standalone ? "minimum.html" : "base.html" %}
Run Code Online (Sandbox Code Playgroud)

在此示例中,如果独立变量的计算结果为true,则模板将扩展"minimum.html"布局模板,否则将扩展"base.html".