3

我有一个用 Symfony 2 编写的单页 ​​webapp,其中所有的 css 和 javascript 资产都位于 web/static/all.js 和 web/static/all.js 中。这些以标准方式从 intex.html.twig 模板链接:

{% javascripts output='static/all.js' filter="?closure"
    '@MyBundle/Resources/assets/vendor/jquery/jquery.js'
    '@MyBundle/Resources/assets/...'
    '@MyBundle/Resources/assets/...'
%}
    <script type="text/javascript" src="{{ asset_url }}"></script>
{% endjavascripts %}

{% stylesheets output='staic/all.css' filter="?yui_css" combine=true
    '@MyBundle/Resources/assets/css/reset.css'
    '@MyBundle/Resources/assets/css/...'
    '@MyBundle/Resources/assets/css/...'
%}
    <link rel="stylesheet" href="{{ asset_url }}" type="text/css" media="all" />
{% endstylesheets %}

这已经很酷了,因为浏览器在第一次启动时只需要执行 3 个请求,之后执行 1 个或 0 个请求(all.css 和 all.js 使用 .htaccess 缓存)。

但我想更进一步,将所有 css 和 js 转储到 index.html 中,类似于谷歌在其主页上所做的。这将在第一次运行期间只产生一个 http 请求,这将稍微加快应用程序的速度。最好有一个我传递给模板的标志或保留在 twig 全局变量中,这样可以按需在两种模式之间切换。

{%if dumpAssetsIntoTemplate %}
    {# all js and css here #}
{% else %}
    {# asset urls #}
{% endif %}

怎样才能以最小的痛苦做到这一点?

4

1 回答 1

2

如果您查看有关 Twig 扩展的 Twig 参考资料,您会发现该render函数采用路径或 URL。

{{ render(path('route', {params})) }}
{{ render(url('route', {params})) }}

引用文档中的用法“这将呈现给定控制器或 URL 的片段”。

所以我会尝试:

<style type="text/css">
{% stylesheets output='static/all.css' filter="?yui_css" combine=true
    '@MyBundle/Resources/assets/css/reset.css'
    '@MyBundle/Resources/assets/css/...'
    '@MyBundle/Resources/assets/css/...'
%}
    {{ render(asset_url) }}"
{% endstylesheets %}
</style>

与您的 Javascript 文件相同的方法。

如果它不起作用,您可能需要调整 Assetic 捆绑包的设置,特别是名为use_controller.

于 2013-10-20T18:06:17.503 回答