Twig和Symfony2的模板层次结构

时间:2014-08-27 14:29:29

标签: php symfony twig assetic

我正在为几乎所有的开发构建一个具有共同功能的/app/Resources/base.html.twig,例如,所有开发都使用Twitter Bootstrap,Select2和一些常用库。然后,对于任何项目,我创建了一个名为TemplateBundle的包,在其中我有一个名为layout.html.twig的模板,该模板从base.html.twig延伸。以此作为起点我对我的方法有些怀疑:

  • base.html.twig我使用Assetic处理资产,我有以下几行:

    {% block stylesheets %}
        {% stylesheets 
                'bundles/template/css/bootstrap.min.css' 
                'bundles/template/css/bootstrap-theme.min.css' 
                'bundles/template/css/font-awesome.min.css' 
                'bundles/template/css/select2.css' 
                'bundles/template/css/select2-bootstrap.css' 
                'bundles/template/css/bootstrapValidator.min.css' 
                'bundles/template/css/datepicker.css' 
                'bundles/template/css/datepicker3.css' 
                'bundles/template/css/styles.css' 
           filter='cssrewrite' 
        %}
        <link rel="stylesheet" href="{{ asset_url }}" />
        {% endstylesheets %}
    {% endblock %}
    

我希望将base.html.twig视为可扩展,并且在上面的代码中并非所有网站都使用datepicker.cssstyles.css,因为这是当前网站或其他网站的一部分案例文件名在站点之间发生了变化,所以我的问题是:我如何在layout.html.twig处理这个问题?例如,在Site1中,所有模板都将从layout.html.twig扩展,然后在此布局中我可以设置datepickerstyles的使用,但对于Site2,我可以定义仅使用{{1}等等,那么如何在styles维护资产中处理这个问题?

  • 您可能会注意到我的所有资产都位于layout.html.twig,但如果明天我将这个模块称为“模板1”,会发生什么?然后我应该照顾TemplateBundle并改变任何资产路径,你如何处理这个?我的意思是你把公共文件放在哪里,例如这个?

明白我的问题?

1 个答案:

答案 0 :(得分:1)

基础模板将非常复杂。我宁愿选择多种布局。因为你拥有捆绑中的所有东西。

另一种选择是在base.html.twig中使用常见的选项。并使用{{ parent() }}在layout.html.twig上进行扩展,这将打印base.html.twig块内容, 但是你将失去生产中的前端性能。

base.html.twig

{% block stylesheets %}
    {% stylesheets 'bundles/template/css/bootstrap.min.css' filter='cssrewrite' %}
    <link rel="stylesheet" href="{{ asset_url }}" />
    {% endstylesheets %}
{% endblock %}

layout.html.twig

{% block stylesheets %}
    {{ parent() }}
    {% stylesheets 
        'bundles/template/css/datepicker.css' 
        'bundles/template/css/datepicker3.css'
    filter='cssrewrite' %}
    <link rel="stylesheet" href="{{ asset_url }}" />
    {% endstylesheets %}
{% endblock %}