2016-03-10 41 views
2

在Symfony 2.8中,我有SharedBundle,我保留其他包之间共享的视图和其他内容,包括应该由其他包的视图扩展的整个布局。
该共享布局具有一些典型的块,其中sidebar块对于不同的捆绑应该是不同的。Symfony2/Twig - 如何将模板文件内容设置为变量?

目前我没有难看的解决方法:

SharedBundle侧边栏容器:

{% if sidebarcontent is defined %} 
    {{ sidebarcontent|raw }} 
{% else %} 
    SIDEBAR NOT FOUND 
{% endif %} 

而在其他包(这里:BundleA)在每一个延伸共享的主视图的视图:

{% extends 'SharedBundle:layout.html.twig' %} 
{% block sidebar %} 
    {% include 'BundleA:_partials:sidebar.html.twig' %} 
{% endblock %} 
{% set sidebarcontent = block('sidebar') %} 

但我认为这看起来不太好。有没有更好的办法?

回答

1

我认为这是一个有效的方法。我能想到的唯一简化不是使用变量sidebarcontent

您可以使用block('sidebar')if语句中:

{% if block('sidebar')|length > 0 %} 
    {{ sidebarcontent|raw }} 
{% else %} 
    SIDEBAR NOT FOUND 
{% endif %} 

确保块检查它的内容之前就存在,所以用一个空字符串初始化它:

{% block sidebar %}{% endblock %} 
+0

感谢。我通过变量传递模板,因为实际上呈现它的树枝是部分的,这是部分包含的,它包含在...等等。我前一段时间想到我不能覆盖块,是包括覆盖模板。 – b174008

相关问题