symfony内联资产与资产

时间:2015-10-02 07:43:23

标签: javascript css symfony assets assetic

我有以下基于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来做,但它应该是相同的概念。

谢谢!

1 个答案:

答案 0 :(得分:2)

在生产模式下,symfony会生成指向静态文件的链接,该文件可以直接包含在模板中。需要使用以下内容生成此文件:

php app/console assetic:dump --env=prod --no-debug

在开发模式下,没有生成可以包含的静态文件。 asset_url包含一个url,它将调用symfony控制器,该控制器将动态生成所需的js / css文件。显然,在symfony中包含控制器的输出非常容易:

{% render asset_url %}

要回答我自己的问题,可以编写一个twig扩展名,其中包括一个静态文件或render方法的转发请求,具体取决于它是在prod或dev模式下调用的。

如果/当我写这样的扩展名时,我会更新此页面。

另一种选择是不使用资产的开发模式,并且总是动态生成静态css / js文件:

php app/console assetic:watch

然后一个简单的include就可以了。

我希望Symfony中有一个开箱即用的方法来完成这项常见任务。