我真的很想在我的 symfony 2 项目中使用资产,因为它有很多有用的功能,但我不确定实现以下要求的最佳方法。
我有几个可以包含在所有页面中的 js 文件。但是,其中一些仅与页面模板的子集相关,我在其中包含需要这些特定 javascript 文件的特定模板(或也嵌入特定控制器)。
现在我有以下选择:
我为布局和特定页面模板中的 javascripts 创建了一个块元素(我在其中包含带有 javascript 的模板,例如 templateWithComplexJs.html.twig),我使用 {{ parent() }} 覆盖此块,如此处所述:跨继承模板组合资产资源。
{# ... specific.html.twig #} {% extends 'MyBundle::layout.html.twig' %} ... {% include 'MyBundle:Foo:templateWithComplexJs.html.twig' %} ... {% block javascripts %} {{ parent() }} {% javascripts '@MyBundle/Resources/public/js/specific/complex.js' %} <script src="{{ asset_url }}"></script> {% endjavascripts %} {% endblock %}
我看到的缺点:
a) 当我调整包含的模板(例如更新到新的 js lib)时,我必须调整包含它们的所有页面模板。在一个很容易导致错误的复杂系统中。
b)可能发生我两次包含一个javascript,一次在布局中,一次在模板的javascript中,assetic不知道,因为它们是分开处理的。我在布局中包含了所有需要的 js 文件,然后我只需要在调整包含的模板时更改一个位置,而且我不太可能包含两次 javascripts。
我看到的缺点:
由于 js 文件的大小可能很大,我宁愿只在我真正需要它们的少数情况下才包含它们。
在这个相关的问题(Twig Assetic Stylesheets Between Multiple Templates)中,它说目前不可能使用资产来实现令人满意的解决方案,但我想我并不是唯一一个有这些要求并且想要使用资产的人。
那么,这种情况的最佳实践是什么?