我有以下基于Symfony2文档的代码:
{% block javascripts %}
{% javascripts filter="?jsqueeze" output="js/app.js"
"%kernel.root_dir%/Resources/assets/js/one.js"
"%kernel.root_dir%/Resources/assets/js/two.js" %}
<script src="{{ asset_url }}"></script>
{% endjavascripts %}
{% endblock %}
这就像魅力一样.
我想做的不是
<script src="{{ asset_url }}"></script>
使用类似的东西:
<script> ... inline asset contents here ... </script>
我尝试了资产文档以及挖掘AsseticTokenParser和AsseticNode类,但找不到引用实际文件路径而不是url的变量.
通常我用css而不是js来做,但它应该是相同的概念.
谢谢!
解决方法:
在生产模式下,symfony生成一个指向静态文件的链接,该文件可以直接包含在模板中.需要使用以下内容生成此文件:
php app/console assetic:dump --env=prod --no-debug
在开发模式下,没有生成可以包含的静态文件. asset_url包含一个url,它将调用symfony控制器,该控制器将动态生成所需的js / css文件.显然,在symfony中包含控制器的输出非常容易:
{% render asset_url %}
要回答我自己的问题,可以编写一个twig扩展名,其中包括一个静态文件或转发请求来呈现方法,具体取决于它是在prod或dev模式下调用的.
如果/当我写这样的扩展名时,我会更新此页面.
另一种选择是不使用资产的开发模式,并且总是动态生成静态css / js文件:
php app/console assetic:watch
然后一个简单的包含将起作用.
我希望Symfony中有一个开箱即用的方法来完成这项常见任务.