在Symfony2中为Assetic配置输出目录

在Symfony2中为Assetic配置输出目录,symfony,assetic,Symfony,Assetic,我想全局配置assetic转储JS文件的输出目录。目前,他们总是访问web/js/*。我想将其更改为web/js/compiled/* 可以在每个文件级别指定此选项: 似乎找不到在我的Symfony应用程序中全局设置此项的方法。有我丢失的配置参数吗 更新 找到名为write\u to的资产配置参数。在config.yml中设置此选项会导致命令行assetic:dump将文件转储到新目录,但在细枝文件中,asset\u urlvar仍然指向原始路径。您可以将细枝的资产路径(assets\u bas

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

可以在每个文件级别指定此选项:

似乎找不到在我的Symfony应用程序中全局设置此项的方法。有我丢失的配置参数吗

更新


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

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

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

这将影响asset以及twig的
asset()
方法的
asset\u url
。后者可能需要,也可能不需要。

您应该使用属性write\u 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/
输出字符串从结尾处开始写入

例如

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

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

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


>代码> AsExtSkyBaseUrs[U/COD]也被<代码> {%图像%} /代码>作为代码前的根>输出< /代码>值,但是 {%%图像%}在呈现HTML(仅当抛出)时,不考虑<代码> Wrave>到/Cuth>,因此最好不要使用<代码> RealeSe> < /Cord> >,只依赖于代码>输出< /Cord>值>。strong>关于它的更多信息,请在和中尝试此命令
$app/console--env=prod-assetic:dump-web/
您只需更改您想要的url,而不是“web/”

帮助我解决了这个问题。 在dev中,您的资产仍将通过控制器,但在生产中,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 %}
{%block javascripts%}
{%javascripts'@jquery'@bootstrap_js'@backbone'@handlebar'combine=true package='assetic'}
{%endjavascripts%}
{%endblock%}

请注意,您必须在java脚本标记中添加package='assetic'属性。在我看来,这是一个很好的折衷方案,因为它不会像kmfk的解决方案那样将资产从其他捆绑包中分离出来。

请简要说明一下。如果您正在使用
资产\u基础\u URL
,来指定相对基础URL,则这仅适用于Symfony 2.7之前的版本,因为该版本中引入了新的资产组件。有关如何改变这一点的更多信息,请访问,但详细信息如下:

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

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

你有没有想出一个解决办法?我假设配置中的
read_from
选项就是我们要找的。然而,我不能选择做任何事情。无论我将read_from参数设置为什么,我的应用程序都使用默认路径。@kmfk Nothing。现在,我们只是为每个
javascripts
块设置
output
param,但这一点都不理想。是的,我让assetic将我的资产直接转储到我们的S3存储桶,我希望prod环境从那里读取文件,而开发环境则转储到本地文件夹,诸如此类,在我们的开发服务器上,我的模板应该从该文件夹中读取。最后,我检查了控制器中的环境,并将一个var传递给模板,作为cdn的
asset\uurl
的前缀。虽然不理想,但它确实起到了作用。那么,当变量{asset\u url}没有注意到它时,为什么会存在这个“write_to”参数呢。这根本没有经过深思熟虑……:(
framework:
    assets:
        base_path: /some-relative-url