2013-10-31 86 views
10

的cssrewrite过滤器重写后产生错误的URL: 我有我的包包含位于 资源/公/更少/ common.less一个.LESS文件Symfony2的Assetic错误cssrewrite资源CSS /减档路径

我也有一个图像,位于资源/公/图片/ colorfulbg.jpg

我在命令行中运行:

php app/console assets:install web --symlink 

其在web目录中产生正确的公共结构:

web 
+--bundles 
    +--mybundle 
     +--less 
     | +--common.less 
     | 
     +--images 
     +--colorfulbg.jpg 

在我的模板,我有以下几点:

{% stylesheets 'bundles/mybundle/less/*' filter='cssrewrite,less' %} 
    <link rel="stylesheet" href="{{ asset_url }}" type="text/css" /> 
{% endstylesheets %} 

该文件夹只包含一个.LESS文件,这是简单的:

@bg: #f4f4f4; 
body 
{ 
    background-image: @bg url(../images/colorfulbg.jpg); 
} 

有什么问题,因为重写的背景路径是:

url(../../bundles/mybundle/images/colorfulbg.jpg); 

,因此背景不适用

我到底做错了什么?

我使用symfony的2.3和assetic包2.3 谢谢

+0

我不认为我明白你是什么意思... – Stormsson

+1

如果你只是简单地使用'background-image:@bg url(images/colorfulbg.jpg);'? – nietonfir

+1

url被改写为: url(../../ bundles/timerbase/images/colorfulbg.jpg); 至 url(../../ bundles/timerbase/less/images/colorfulbg.jpg); 我会期待像(../images/colorfulbg.jpg) – Stormsson

回答

-3

这是一个常见的问题,我建议你不要使用cssrewrite过滤器,并在一开始就使用与/网址

url("/bundles/mybundle/images/colorfulbg.jpg"); 

中当然这种方法有一个缺点,即网站必须安装在域的根目录下,但说实话我没有在子目录中看到Symfony项目。

+0

,即使删除cssrewrite并使用url,因为您建议它不工作:/我认为app_dev.php获取方式... – Stormsson

+0

@Stormsson您的操作系统是否支持符号链接? Windows没有。再次尝试'''php app/console assets:install web --symlink''',然后导航到web目录并检查路径是否正确 –

+0

是的,我在osx上。路径似乎都是正确的,我确认我发布在第一篇文章中的结构已被检查 – Stormsson

0

您的模板中的资产使用了错误的定义类型,请参阅以下内容(注意@前缀)。同样在你的CSS中,你必须从你的Bundle/Resources/public/less文件夹下去。所以它不是/bundles/../bundles但是最有可能的../images/

{% stylesheets filter='less,cssembed,?yui_css' output='css/final.css' 
     '@AcmeDemoBundle/Resources/public/beautifulslider.css' 
     '@AcmeDemoBundle/Resources/public/less/site.less' 
    %} 
    <link href="{{ asset_url }}" type="text/css" rel="stylesheet" media="screen" /> 
    {% endstylesheets %} 

UPDATE1

鉴于上述情况,我的项目之一是在同一种设置的,它只是仍然在2.2,但我不认为这事我只是给它一个尝试

xxx michael [master] $ app/console assetic:dump --env=dev 
之后,从我.LESS删除这些行

& > a { 
    background:transparent url('../images/btn-big-gray.png') repeat-x; 
    } 

图片不见了

我恢复了线路,并且在踢出资产后他们又回来了......我认为dis的推荐并不包括LESS参与的事实吗?

assetic: 
    write_to:  '%kernel.root_dir%/../web/assets' 

    assets: 
     my_stylesheets: 
      output: 'css/styles.css' 
      inputs: 
       - 'bundles/mybundle/css/styles.css' 

我无法找到一个更好的解决方案,而随后不指定任何东西比web/文件夹:

+2

nope ...食谱本身建议不要这样做,因为cssrewrite:http://symfony.com/doc/current/ cookbook/assetic/asset_management.html #include -css-stylesheets btw问题是INSIDE css/less文件的url不正确。正确包含css/less文件 – Stormsson

+0

我认真推荐您尝试使用它...我会更新为什么 – wtfzdotnet

0

指定为assetic(假设,我想我的风格输出到web/assets/css/styles.csswrite_to选项时,我有同样的问题为write_to选项(或根本不指定它)。但是,您仍然可以对每个单独的资产使用子文件夹:

assetic: 
    write_to:  '%kernel.root_dir%/../web' 

    assets: 
     my_stylesheets: 
      output: 'assets/css/styles.css' 
      inputs: 
       - 'bundles/mybundle/css/styles.css' 

P.S.在两个大写的情况下,样式将在web/assets/css/styles.css中,但在第一种情况下,csrewrite会给出不正确的路径,而第二种情况会正常工作。