在Symfony2中配置Assetic的输出目录

时间:2012-02-23 12:19:01

标签: symfony assetic

我想全局配置assetic转储我的JS文件的输出目录。目前,他们总是前往web/js/*。我想将其更改为web/js/compiled/*

可以在每个文件级别指定:http://symfony.com/doc/2.0/cookbook/assetic/asset_management.html#dumping-asset-files

似乎找不到在我的Symfony应用程序中全局设置此方法的方法。我缺少任何配置参数?

更新

找到名为write_to的资产配置参数。在config.yml中设置此选项会导致命令行assetic:dump将文件转储到新目录,但在twig文件中,asset_url var仍然指向原始路径。

5 个答案:

答案 0 :(得分:17)

您应该使用 write_to 属性。

在我的配置例程中我使用

# Assetic Configuration
assetic:
    debug:          %kernel.debug%
    use_controller: %kernel.debug%
    read_from:      %kernel.root_dir%/Resources/views/
    write_to:       %kernel.root_dir%/../web/static/

输出字符串从 write_to 开始

例如

{% javascripts filter="closure" output='js/main.js'

...

 {% stylesheets filter='compass,?cssrewrite' 
     'default/static/sass/screen.scss' 
     output='css/screen.css' 
 %} 

两者将分别放在 /web/static/js/main.js 中 和 /web/static/css/screen.css

assets_base_urls用于指定用于从http和ssl(https)页面引用的资源的基本URL。

assets_base_urls也使用<{p> !! {% images %}作为output值之前的根,但{% images %}不考虑write_to在渲染html时(仅在转储时),最好不要使用write_to并仅依赖output值。 有关my other post on stackoverflowthis post on AsseticBundle's github 的更多信息。

答案 1 :(得分:4)

您可以将树枝的资产路径(assets_base_urls)设置为静态路径,而不是使用相对路径。在config.yml文件中,它看起来类似于:

framework:
   templating:
      engines: ['twig']
         assets_base_urls:
            http: [http://path.to-cdn.com]

这将影响资产和asset_url方法的asset()。后者可能是也可能不是。

答案 2 :(得分:2)

This GitHub issue comment帮我解决了这个问题。 在开发中,您的资产仍将通过控制器,但在生产中,URL将根据您的需要。

示例config.yml:

assetic:
    write-to:  %kernel.root_dir%/../web/assets
    ...
framework:
    ...
    templating:
        engines: ['twig']
        packages:
            assetic:
                base_urls: '/assets'

模板中的示例:

{% block javascripts %}
    {% javascripts '@jquery' '@bootstrap_js' '@backbone' '@handlebars' combine=true package='assetic' %}
    <script src="{{ asset_url }}"></script>
    {% endjavascripts %}
{% endblock %}

请注意,您必须在java scripts标记中添加package ='assetic'属性。这是一个很好的妥协IMO,因为它不会像kmfk的解决方案那样打破其他捆绑产品的资产。

答案 3 :(得分:2)

快速说明一下。如果您使用assets_base_urls,要指定相对基本URL,这仅适用于Symfony 2.7之前,因为该版本中引入了新的资产组件。有关如何更改此信息的更多信息,请参阅http://symfony.com/blog/new-in-symfony-2-7-the-new-asset-component,但其中的长短是:

framework:
    templating:
        assets_base_urls: 
            http: ['/some-relative-url']
            ssl: ['/some-relative-url']

变为:

framework:
    assets:
        base_path: /some-relative-url

答案 4 :(得分:-4)

尝试此命令$ app/console --env=prod assetic:dump web/ 你有责任改变你想要的网址而不是'web /'