我有一个用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,类似于google在其主页上所做的那样。这将在第一次运行期间仅产生一个http请求,这将加快应用程序的速度。有一个标志我会传递给模板或保留在twig全局变量中,这样可以根据需要在两种模式之间切换。
{%if dumpAssetsIntoTemplate %}
{# all js and css here #}
{% else %}
{# asset urls #}
{% endif %}
如何以最小的痛苦完成这项工作?
答案 0 :(得分:2)
如果查看Twig reference about Twig extensions,您可以看到render
函数采用路径或网址。
{{ 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
的设置。