Symfony2通过来自assetic.yml的循环包含js文件

时间:2013-08-05 15:45:28

标签: symfony assetic symfony-2.3

assets.yml:

assetic:
    assets:
        base_js:
            inputs:
                - '%kernel.root_dir%/Resources/public/jquery-1.10.2.min.js'
                - '%kernel.root_dir%/Resources/public/bootstrap3/js/bootstrap.min.js'
            output: 'js/scripts.js'
        base_css:
            inputs:
                - '%kernel.root_dir%/Resources/public/bootstrap3/css/bootstrap.min.css'
            output: 'js/styles.css'

config.yml

imports:
    - { resource: parameters.yml }
    - { resource: security.yml }
    - { resource: assets.yml }

#...

assetic:
    debug:          %kernel.debug%
    use_controller: false
    bundles:        [MyAdminBundle]
    #java: /usr/bin/java
    filters:
        cssrewrite: ~

在模板中:

{% block javascripts %}
   {% javascripts '@base_js' %}
       <script src="{{ asset_url }}"></script>
   {% endjavascripts %}
{% endblock %}

然而,作为输出,我得到 js / 80e3acc_part_1.js ,这个文件只包含jquery代码,缺少boostrap。任何想法如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

遗憾的是,如果在{% image %}{% stylesheets %}{% javascripts %}标记中没有指定资产集合的输出文件名配置,则默认情况下,如果只有一个{{1} } -resource存在 - 这解释了文件名 js / 80e3acc_part_1.js

此外,@函数不适用于asset() - 语法。

使用以下命令修复文件名问题。

@

或只是直接在{% javascripts '@base_js' output='js/scripts.js' %} <script src="{{ asset_url }}"></script> {% endjavascripts %} 函数中包含输出文件名。

asset()

这种语法比较清晰,但是如果你想重命名输出文件,必须更改配置和模板中的文件名,这样会留下不足之处。

请注意,如果添加资源,在大多数情况下,资产不会自动更新缓存集合的资源。因此,在转储资产之前,请始终使用<script src="{{ asset('js/scripts.js') }}"></script> 清除缓存。

这可以解释为什么在转储后输出文件中缺少bootstrap,如果你将它添加为第二个资源但在使用app/console cache:clear命令之前没有清除缓存。