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表达式,因此可以使继承机制成为条件:
Run Code Online (Sandbox Code Playgroud){% extends standalone ? "minimum.html" : "base.html" %}在此示例中,如果独立变量的计算结果为true,则模板将扩展"minimum.html"布局模板,否则将扩展"base.html".